1
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(nodes) 之后进行,我会看到更改影响了节点,但不影响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;

4

2 回答 2

1

您可以简单地直接设置innerHTMLof p

p.innerHTML = '&nbsp';

请注意, “从调用它的元素中Element.querySelectorAll()返回与指定的 CSS 选择器组匹配的所有元素的非活动 NodeList 。”descended

因此,默认情况下,您调用它的元素p不会包含在返回的NodeList.

于 2013-06-08T20:16:53.750 回答
0

您的 NodeList 应在使用前转换为数组。

将 JavaScript NodeList 转换为数组的最快方法?

于 2013-06-08T21:02:04.023 回答