根据孩子的attrribute数据删除<li>元素

时间:2017-03-06 03:31:21

标签: javascript html

我有以下HTML:

<li><div class="abc"><a href="https://www.google.com" data-test="male">John</a></div></li>
<li><div class="abc"><a href="https://www.facebook.com" data-test="female">Maria</a></div></li>
<li><div class="abc"><a href="https://www.instagram" data-test="male">Peter</a></div></li> 

我尝试做的是完全删除/隐藏具有<li>值的两个data-test="male",而不使用jquery。任何帮助/建议都会有所帮助。

4 个答案:

答案 0 :(得分:3)

您可以使用CSS选择器的强大功能:

nativeElement
[].forEach.call(document.querySelectorAll('li a[data-test="male"]'), function(el) {
  el.parentNode.parentNode.remove();
});

使用的API:

答案 1 :(得分:0)

如果您定位浏览器,则全部支持querySelector。你可以使用

{parentDom}.querySelector('a[data-test="male"]').parentNode.parentNode

找到您需要的li

相关文件:

  1. querySelector
  2. parentNode

答案 2 :(得分:0)

您可以使用Element.closest

  

Element.closest()方法返回最接近的祖先   当前元素(或当前元素本身)匹配的   参数中给出的选择器。如果没有这样的祖先,那就是   返回null。

由于这仍然是实验性的,因此请务必检查浏览器支持here以及此答案中提供的polyfill。

使用方法:

var el = element.closest(<[css selector]>);

代码段:

(function() {
  var selectors = document.querySelectorAll('[data-test=male]'),
    i = 0,
    len = selectors.length;

  for (i, len; i < len; i++) {
    var current = selectors[i];
    current.closest('li').remove();
  }
})();
<li>
  <div class="abc"><a href="https://www.google.com" data-test="male">John</a></div>
</li>
<li>
  <div class="abc"><a href="https://www.facebook.com" data-test="female">Maria</a></div>
</li>
<li>
  <div class="abc"><a href="https://www.instagram" data-test="male">Peter</a></div>
</li>

对于不支持此功能的浏览器,您可以使用MDN提供的以下polyfill:

if (window.Element && !Element.prototype.closest) {
    Element.prototype.closest = 
    function(s) {
        var matches = (this.document || this.ownerDocument).querySelectorAll(s),
            i,
            el = this;
        do {
            i = matches.length;
            while (--i >= 0 && matches.item(i) !== el) {};
        } while ((i < 0) && (el = el.parentElement)); 
        return el;
    };
}

答案 3 :(得分:0)

此代码也适用于旧浏览器

var els = document.getElementsByClassName('abc');
for (var i=0; i< els.length; i++){
    if (els[i].firstChild.getAttribute('data-test') === 'male') {
        els[i].parentNode.parentNode.removeChild(els[i].parentNode);
    }
}