1

我的代码:

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

我没有收到警报“吠叫”。我究竟做错了什么?

4

1 回答 1

0

您的问题是生成的 html 与选择器不匹配:

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

因为> *只会匹配pen> .dog不会匹配。您可以将这些更改为:

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

这是一个小提琴:http: //jsfiddle.net/pTqmL/

编辑

或者,如果它只需要在内部parent

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

根据您的评论,我认为您可能忽略/不知道的核心问题是查询的范围在父级内部。

于 2012-04-06T03:21:16.620 回答