JS:getElementsByTagName得到所有*但是一个元素

时间:2017-12-10 16:53:19

标签: javascript

我正在使用一个脚本,我想要选择网页的所有节点

    nodes = document.body.getElementsByTagName('*');

但我想排除一个元素,比如说#ThisID,所有孩子

我该怎么做?

1 个答案:

答案 0 :(得分:5)

您可以使用querySelectorAll

执行此操作
nodes = document.body.querySelectorAll('*:not(#ThisID)');
  • *将选择身体中的所有元素。
  • :not(selector)将过滤掉与提供的选择器相关的元素。

要排除需要过滤的节点的子节点,

var nodes = Array.from(document.body.querySelectorAll('*:not(#ThisID)'));
var filter = document.querySelector("#ThisID");

nodes = nodes.filter(function(node) {
    return !filter.contains(node);
});

console.log(nodes); // This will not contain the node #test1 as well its children.

迭代收集的节点,并使用.contains

过滤掉所需的节点

DEMO