如何删除使用querySelectorAll获取的元素?

时间:2012-10-29 16:34:15

标签: javascript element selectors-api

这似乎是一个快速回答的东西,但我找不到一个。也许我在搜索错误的条款?没有图书馆,虽然我不需要跨浏览器的后备,但我的目标是该项目的所有最新版本。

我得到了一些元素:

element = document.querySelectorAll(".someselector");

这是有效的,但我现在如何删除这些元素?我是否必须遍历它们并执行element.parentNode.removeChild(element);事情,或者是否有一个我缺少的简单函数?

3 个答案:

答案 0 :(得分:48)

是的,你几乎是对的。 .querySelectorAll返回冻结的NodeList 。你需要迭代它并做事。

Array.prototype.forEach.call( element, function( node ) {
    node.parentNode.removeChild( node );
});

即使你只得到一个结果,你也需要通过索引来访问它,比如

elements[0].parentNode.removeChild(elements[0]);

如果您只想查询一个元素,请改用.querySelector。在那里,您只需获取节点引用,而无需使用索引进行访问。

答案 1 :(得分:17)

由于NodeList已经支持forEach,您可以使用

document.querySelectorAll(".someselector").forEach(e => e.parentNode.removeChild(e));
<div>
  <span class="someselector">1</span>
  <span class="someselector">2</span>
  Should be empty
</div>

请参阅NodeList.prototype.forEach()。请记住,不支持 Internet Explorer

修改:支持Internet Explorer。如果您还希望在IE中使用上面的代码,只需在JS中添加这段代码:

if (!NodeList.prototype.forEach && Array.prototype.forEach) {
    NodeList.prototype.forEach = Array.prototype.forEach;
}
IE中的

..和NodeList也会突然支持forEach

答案 2 :(得分:3)

Array.fromChildNode.remove更加简洁:

Array.from(document.querySelectorAll('.someselector')).forEach(el => el.remove());

好吧,刚刚看到NodeList是可迭代的,因此可以做得更短:

document.querySelectorAll('.someselector').forEach(el => el.remove());