querySelectorAll更改属性

时间:2013-06-08 20:11:31

标签: javascript selectors-api

var p = document.getElementById(e),
   nodes = p.querySelectorAll('span');

   for (var i=0; i<nodes.length; i++) {
      node = nodes[i];
      node.innerHTML = '&nbsp;';
   }

如果我在console.log(p)和console.log(节点)之后创建,我发现更改会影响节点,但不会影响p。为什么以及如何申请p?

如果我让nodes = p.childNodes;一切正常。

那么,主要问题是,为什么它适用于childNodes并且不能与querySelectorAll一起使用?

已更新

最后,添加如下内容可以解决问题:

for (var k=0; k<childNodes.length; k++) {
        for (var j=0; j<nodes.length; j++) {    
            if (childNodes[k].id === nodes[j].id) {
                p.replaceChild(nodes[j],childNodes[k]);
            } 
        }   
    }

nodes = querySelectorAllchildNodes = p.childNodes;

2 个答案:

答案 0 :(得分:1)

您可以直接设置innerHTML的{​​{1}}:

p

请注意,Element.querySelectorAll()“从调用它的元素返回所有元素p.innerHTML = '&nbsp'; 的非实时NodeList,它与指定的CSS选择器组匹配。”

因此,默认情况下,您在descended上调用此元素的元素不会包含在返回的p中。

答案 1 :(得分:0)

在使用NodeList之前,应将其转换为数组。

Fastest way to convert JavaScript NodeList to Array?