2012-04-06 13 views
1

マイコード:Dojoクエリー・子孫?

var parent = document.createElement('div'); 
var pen = document.createElement('div'); 
var dog = document.createElement('div'); 
dog.className = "dog"; 
pen.appendChild(dog); 
parent.appendChild(pen); 
dojo.query("> *", parent).forEach(function(node){ 
    if(node.className == "dog")alert('bark'); 
}); 
dojo.query("> .dog", parent).forEach(function(node){ 
    alert('bark'); 
}); 

私は何の警告 "樹皮" Sを取得していませんよ。私は間違って何をしていますか? > *だけpenに一致し、> .dogが一致しませんので

<div title="parent"> 
    <div title="pen"> 
     <div class="dog"> 
     </div> 
    </div> 
</div> 

+0

HTMLを投稿できますか?また、 'className'の代わりに' dojo.hasClass'を使用します。 – fncomp

+0

domClass.containsは通常使用しますが、この場合は違いはありません。また、HTMLはありません。 – Derek

+0

私は生成されたdomをHTMLとして数えますが、あなたが正しいと思います。 'domClass'については、ページの上部に' require/define'がなければ、Dojoの古いバージョンを使用していると思います。私の間違い。 – fncomp

答えて

0

あなたは問題だが、生成されたHTMLは、セレクタに一致しないということです。あなたはこれらを変更することができます:あなたに基づいて

dojo.query("*", parent).forEach(function (node) { 
    if (node.className == "dog") { 
     alert('bark'); 
    } 
}); 
dojo.query(".dog", parent).forEach(function (node) { 
    alert('bark'); 
}); 

http://jsfiddle.net/pTqmL/

編集

それともそれだけでparentの内側にする必要がある場合:ここで

var parent = document.createElement('div'); 
var pen = document.createElement('div'); 
var dog = document.createElement('div'); 
dog.className = "dog"; 
pen.appendChild(dog); 
parent.appendChild(pen); 
dojo.query("> * > *", parent).forEach(function (node) { 
    if (node.className == "dog") { 
     alert('bark'); 
    } 
}); 
dojo.query("> * > .dog", parent).forEach(function (node) { 
    alert('bark'); 
}); 

フィドルですコメント、私はあなたが見落としている/認識していない中心的なものは、クエリが親の内部でスコープされていることだと思います。

+0

すべての子孫を取得するために可能な限り深く進むクエリ関数の文字列はありませんか?または、子孫の各レイヤーに対して手動で ">"行う必要がありますか? – Derek

+0

>も除外できます。クエリは親の内部だけを調べます。 – fncomp

+0

私は参照してください、thx 4char – Derek