byId

在dojo中,除了沿用Dom结点, dojo 还自定义了一类结点用“dojoType" 进行标识。

dojo 称这些结点为widget。 当检测到HTMl文档中某个标签定义了dojoType 属性之后,dojo会调用dojo包中相应的 js 及 css 文件对这个结点进行渲染。 从而这个结点元素就会相应地显示出具有dojo特色的样式及功能。

如此说来, dom.byId 跟 dojo.byId 获取到的就是普通的HTMl文档结构树中的某个结点元素,以下简称dom结点, 而 registry.byId 获取到的是一个dojo的widget,以下简称widget结点。

它们的区别之一是 innerHTML, tagName 等方法只对用 dom结点生效。

如果

element =registry.byId("someId"),

element.innerHTML = "some message"

这个命令并不会在页面上显示 "some message" 。


而下面这一句是可以在页面上显示出 “hello world" 的。

dom.byId("someNode").innerHTML = "Hello World";


同样的,有一些命令仅对widget 结点生效,如果用dom结点去用这些命令的话,控制台会提示 “元素为空”类似的错误信息。


有一个很简单的方法可以检查一下是否获取到了想要的结点,如下:

[javascript] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. var dijit = registry.byId("testdom");  
  2.         if(dijit){  
  3.            alert("yes")}  
  4.         else{  
  5.            alert("no")};  

参考:

dojotoolkit - registry http://dojotoolkit.org/reference-guide/1.9/dijit/registry.html点击打开链接

dojotoolkit - dojo.byId http://dojotoolkit.org/reference-guide/1.7/dojo/byId.html点击打开链接

dojotoolkit - dom http://dojotoolkit.org/reference-guide/1.8/dojo/dom.html点击打开链接

补充

昨天写代码遇到一个问题,就是用dom结点还是widget 结点的问题。 

代码如下:

[javascript] view plain copy 在CODE上查看代码片 派生到我的代码片
  1.     var comment = dom.byId("comments");  
  2. var newcomment = new listitem;  
  3. newcomment.innerHTML = "msg";  
  4. newcomment.placeAt(comment,"first");  
id=comments 是html 文件中的一个空的div 标签。

目的是用new listitem 新生成一个widget, 在它里面写入文本”msg", 然后把这个listitem 放到id=comments 的div中。

由于newcomment 是一个dojo的widget 对象, 它没有innerHTML方法,所以newcomment.innerHTMl = "msg" 这种写法无法得到想要的效果, 最终页面中展示的是一个空的listitem. 这种情况下firebug没有错误提示,如果一开始没有dom结点与widget结点有区别的概念的话,调试起来会比较困难。

对于widget结点,要想获取它的dom结点,用node.domNode 就可以。所以上面代码的第三行写成


        newcomment.domNode.innerHTML = msg;

问题就能够解决。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值