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ループ内のノードを使用してその子にアクセスしたいそれ、どうやったら出来るの?
EDIT: 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.
}
}
いや、そのdoesntのヘルプ。 nodeTypeは1ですが、if条件が満たされています。 これは、ノードに子がないことを意味しています。 f [0] .childrenも未定義であることに注意してください。 したがって、どのHTMLFormElementがノードを参照していますか? searchformはhtmlページ内の唯一のフォームです。 – crazyphoton
NodeTypeは子があることを保証しません。それは要素ノードだけを言います。そして私は前にこれを気付かなかったが、node.childNodesではなくnode.children? –
はい、私はそのノードが何であるか疑問に思っています。 ifブロック内で警告(node.innerHTML)を行うと、次のようになります。 \t \t \t \t \t はなぜ、これは子供ではないのですか? 子供はdojo関数です。http://dojotoolkit.org/api/1.5/dojo/NodeList/children – crazyphoton