2009-10-09 101 views
6

我刚刚开始使用dojo,并且我已经理解dojo.query与jQuery中的$相同。dojo.query()返回什么?

但我还没有弄清楚它返回的结果。它是像jQuery中的专门对象吗?

我想要做的(没有运气)是:

dojo.query("output").innerHTML = data; 
//this doesn't work either: 
dojo.query("output").html(data); 
//tried accessing by id as well 
dojo.query("#output").html(data); 
//and tried to access a div, incase dojo has some issues with html5 elements 
dojo.query("#divOutput").html(data); 

而且我目前使用的新html5 elements

<output id="output">Output goes here</output> 
<div id="divOutput">non-html5 output goes here</div> 

我似乎无法找到dojo.query()返回的对象如何处理好的清单..

编辑:好吧,我认为道场现在只是在搞我。我发现这个方法:addContent(),并在上述选择器上工作。但我不想添加内容,我想替换内容...

回答

3

查询方法返回一个NodeList对象。

在参考NodeList的参考文献中,您可以找到可应用于元素列表 的功能列表。列表中没有innerHTML函数,但是html函数应该可以工作。

HTML中没有“输出”元素,也许您尝试使用类名称“output”来定位元素?

dojo.query(".output").html(data) 

或者id为“output”的元素?

dojo.query("#output").html(data) 
+0

不,我使用HTML5元素'output',但只是为了确保我已经尝试给元素添加一个id,并且做同样的...仍然没有结果。 – peirix 2009-10-09 09:01:03

+0

@peirix:我明白了。要使用输出元素,你应该设置它的值属性,而不是它的innerHTML属性。 – Guffa 2009-10-09 09:19:00

+0

输出元素像div一样工作。它只是一个内容持有者,所以它没有价值属性。 http://www.w3schools.com/tags/html5_output.asp但我仍然无法使'html()'方法工作,即使在'div's ... – peirix 2009-10-09 09:42:32

0

此外,还有一个dojox.jq包装(在发展,在未来1.4),它模仿的JQuery返回对象的API

1

正如上面所说的,查询方法返回NodeList对象,这样你就可以遍历这导致作为阵列,或与节点列表(例如,attr)使用工作使用Dojo方法:

dojo.query("#divOutput").attr("innerHTML", data); 

但只要你想查询由ID节点,这将是更好地使用dojo.byId()方法,它返回domNode:

dojo.byId("divOutput").innerHTML = data; 

或者更道场风格:

dojo.attr(dojo.byId("divOutput"), "innerHTML", data) 
3

如果你想同样的事情,以取代所有输出标签的内容,那么这段代码应始终工作:

// replace the contents of ALL <output> tags 
dojo.query('output').forEach(function(node) { node.innerHTML = data; }); 

Dojo还为这些事情提供了一个小捷径。你可以像这样指定字符串节点列表的功能的forEach:

// replace the contents of ALL <output> tags (as long as data is global) 
dojo.query('output').forEach("item.innerHTML = data;"); 

项目字符串中是特别的。 (这是一个调试的痛苦,所以它可能不值得。)

1

通过增加[0]这样试试这个:

dojo.query("output")[0].innerHTML = data; 
0

的文件似乎是一个烂摊子,这是我得到1.7至工作的唯一的东西,

dojo.query("whatever").forEach(function(node, index, array) 
{ 
    node... 
});