javascript - querySelectorAll改变属性

标签 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(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;

最佳答案

您可以直接设置pinnerHTML:

p.innerHTML = '&nbsp';

请注意 Element.querySelectorAll() “返回一个非事件 NodeList,其中包含从调用它的元素开始的所有元素后代,这些元素与指定的 CSS 选择器组匹配。”

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

关于javascript - querySelectorAll改变属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17003396/

相关文章:

javascript - CSS3 选择器 [*|type ="toc"]

javascript - Array.prototype.splice.call - 不使用 querySelectorAll ('.className' )

javascript - 不包含 block 引用的节点的查询选择器

javascript - CasperJS 单击与选择器匹配的所有链接

javascript - 当我选择时禁用复选框

javascript - 从复选框向 Codemirror 添加值/从 Codemirror 中删除值

javascript - TypeScript 和 systemjs 循环依赖

javascript - 如何在nodejs中下载文件(http和https)并实时查看/显示下载进度?

javascript - Coffeescript 访问函数

javascript - 使用 querySelectorAll 获取具有该类名的所有元素,而不仅仅是第一个