您好,我刚刚开始使用Dojo。我正在玩nodelist遍历并发现以下行为。
dojo.query("form.searchform").forEach(function(node, index, arr){
var f = dojo.query("form.searchform");
alert(f[0]); //[object HTMLFormElement]
alert(node); //[object HTMLFormElement]
alert(f.children()); //[object HTMLInputElement] as expected
alert(node.children()); //undefined. why??
});
搜索表如下:
<form class="searchform" name="docsearch" method="post"
action="somelink.php"><input class="searchbox" name="search"
type="text" value="" id="search" name="search" size="30"/>
</form>
这里发生了什么?我想在foreach循环中使用node来访问它的子节点。我该怎么做?
编辑: 还不完全清楚为什么children()不起作用,但是下面的代码解决了这个问题。
var f = dojo.query("form.searchform");
alert(f[0]); //[object HTMLFormElement]
alert(node); //[object HTMLFormElement]
alert(f.children()); //[object HTMLInputElement] as expected
for(i=0;node.childNodes[i] != undefined; i++){
if (node.childNodes[i].nodeType == 1) {
alert(node.childNodes[i].value); // gives value of searchbox.
}
}
答案 0 :(得分:1)
您的节点可能是任何类型的节点,包括文本节点等。您需要检查节点类型以确保其是一个元素节点。如果您正在检查的节点是文本节点,则它不会有子节点。如果节点实际上不包含子节点,也不会有子节点,例如&lt; br /&gt;或者是一个空的div,例如&lt; div&gt;&lt; / div&gt;。查看https://developer.mozilla.org/en/nodeType以获取有关节点的更多详细信息,但基本上您希望将代码更改为:
dojo.query("form.searchform").forEach(function(node, index, arr){
var f = dojo.query("form.searchform");
alert(f[0]); //[object HTMLFormElement]
alert(node); //[object HTMLFormElement]
alert(f.children()); //[object HTMLInputElement] as expected
if (node.nodeType == 1) {
alert(node.children());
}
});