javascript - 删除所有没有属性的元素

标签 javascript html

我试图了解如何删除所有没有指定属性的子元素,例如:

这是 html:

<div class="container">
  <span></span>
  <div></div>
  <strong data-*></strong>
  <p></p>
  <div data-*></div>
</div>

我想要的是删除容器内所有没有data-* 属性的元素。

数据-*

该属性可以是data-anything(数据颜色、数据边框等)。

我正在寻找仅限 JavaScript 的解决方案

最佳答案

使用 .filter().some().forEach() 应该可以解决问题。

var els = document.querySelectorAll(".container *");

[].filter.call(els, function(el) {
    return ![].some.call(el.attributes, function(attr) {
        return /^data/i.test(attr.name);
    });
}).forEach(function(el) {
    el.parentNode.removeChild(el);
});

您需要为旧浏览器打补丁,但您可能已经知道了。


如果像我一样,你喜欢可重用的函数:

var els = document.querySelectorAll(".container *");

[].filter.call(els, els_with_no_data)
  .forEach(remove_nodes);

function remove_nodes(el) {
    el.parentNode.removeChild(el);
}

function has_data_attrs(attr) {
    return /^data/i.test(attr.name);
}

function els_with_no_data(el) {
    return ![].some.call(el.attributes, has_data_attrs)
}

然后使用数组泛型(在支持的浏览器中,否则 polyfiilled):

var els = document.querySelectorAll(".container *");

Array.filter(els, els_with_no_data)
     .forEach(remove_nodes);

function remove_nodes(el) {
    el.parentNode.removeChild(el);
}

function has_data_attrs(attr) {
    return /^data/i.test(attr.name);
}

function els_with_no_data(el) {
    return !Array.some(el.attributes, has_data_attrs)
}

关于javascript - 删除所有没有属性的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22235286/

相关文章:

javascript - 如何检查 props 中的元素是否匹配条件?

javascript - 如何将此异步回调转换为生成器?

javascript - 在 div 单击时切换动态(或 'auto')高度

html - 如何将div的内容对齐到底部

javascript - 使用每个 jquery 循环遍历数组

javascript - DOM 事件目标解构

javascript - JsRender:如何将变量传递到嵌套模板中

WordPress 板球的 Html/CSS 结果页面/记分卡

javascript - Angular 模板页面

javascript - 敲: Click event not firing in some situations