2012-02-07 58 views
1

嗨,我剛剛開始使用Dojo。我正在玩節點列表遍歷,並發現以下行爲。Dojo節點列表遍歷中令人困惑的行爲

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?? 
}); 

Searchform如下:

<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循環中使用節點來訪問它的子節點。我怎麼做?

編輯: 這並不完全清楚爲什麼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. 
     } 
    } 

回答

1

您的節點可能是任何類型的節點,包括文本節點等。您需要檢查節點類型以確保其節點。如果您正在檢查的節點是文本節點,它將不會有子節點。如果該節點實際上不包含兒童,例如<或空的div,例如< div> </div>,也不會有孩子。檢查出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()); 
    } 
}); 
+0

不,這沒有幫助。 儘管nodeType爲1,if條件得到滿足。 我猜這意味着節點沒有孩子。 它可能有助於指出,f [0] .children也是未定義的。 那麼,HTMLFormElement是指什麼節點? searchform是html頁面中的唯一形式。 – crazyphoton 2012-02-09 04:40:47

+0

NodeType不保證它有孩子。它只是說它是一個元素節點。我沒有注意到,但不是node.childNodes而不是node.children? – 2012-02-09 12:54:12

+0

是的,我想知道那個節點是什麼。 如果我在if區塊內部提醒(node.innerHTML),我得到: \t \t \t \t \t         爲什麼這不是一個孩子? 和孩子是道場功能http://dojotoolkit.org/api/1.5/dojo/NodeList/children – crazyphoton 2012-02-11 00:57:20