使用dijit.byId和dojo.byId混淆

时间:2011-07-06 07:04:15

标签: dojo

我试图了解它们之间的区别 dijit.byId和dojo.byId

为此,我采取了一个按钮和一个div。(设置 单击按钮时div内的数据

        给我看看!       

<div id="findMe">
    Hiya!
</div>

这是有效的(dojo.byId)

function callMe()
{
  var node = dojo.byId('findMe');
 node.innerHTML = "Hello World";
 }

但这不起作用(dijit.byId)

 function callMe()
    {
      var node = dijit.byId('findMe');
     node.innerHTML = "Hello World";
     }

我的理解是,在引用div时我们需要使用dojo.byId 当我们引用个人组件时,请使用dijit.byId

如果我错了,请纠正我。

2 个答案:

答案 0 :(得分:5)

如前所述,dojo.byId检索具有该id的DOM节点(如果存在)。

dijit.byId检索dijit._Widget(及其子类)的实例,即dojo对UI对象的抽象,而不是widget的DOM节点。但重要的是要注意dijit.byId通过atrribute“widgetId”, not “id”搜索小部件。如果通过传递已经具有“id”的容器节点来声明小部件,则它们是相等的,但是如果未明确指定,dojo仍会为每个小部件创建属性“widgetId”。

这意味着widgetId和id通常是相同的,但它们可能是不同的。另外,即使在容器节点的id属性不存在的情况下,也始终为给定小部件设置widgetId。

这意味着只要您想要获取某个窗口小部件实例的实例,就应该在每次打算处理DOM树本身时使用dojo.byId和dijit.byId。如果没有小部件,则根本没有理由使用dijit.byId。

答案 1 :(得分:4)

你是对的:

  • dojo.byId在您网站的DOM树中找到具有特定ID的元素 - 它会搜索并返回 HTML元素
  • dijit.byId找到您使用特定ID创建的dijits - 它会搜索并返回 dijits(javascript对象),尽管这些对象通常会引用某个DOM节点。