This question already has answers here:
Find an element in DOM based on an attribute value
                            
                                (6个答案)
                            
                    
                3年前关闭。
        

    

在我的温室工作板上,有一些链接允许申请人从Dropbox上传简历。我需要删除Dropbox链接。我可以用document.getElementsByClassName("link-container")标识子节点,但是谁能帮忙删除data-source="dropbox"的子节点?



<div class="link-container">
    <a data-source="attach" href="#">Attach</a>

      <a data-source="dropbox" href="#">Dropbox</a>
      <a data-source="google-drive" href="#">Google Drive</a>

      <a data-source="paste" href="#">Paste</a>
</div>

最佳答案

我建议-使用ES6 Array.from()和箭头功能-以下内容:



// assuming there might be more than one element to be removed from
// the document, here we use document.querySelectorAll() to retrieve
// all <a> elements with a 'data-source' attribute equal to 'dropbox':
var targets = document.querySelectorAll('a[data-source=dropbox]');

// we convert the NodeList from document.querySelectorAll() into an
// an Array in order to use Array.prototype.forEach() to iterate
// over the elements:
Array.from(targets).forEach(

  // now we use an Arrow function expression to access the
  // current array-element of the array over which we're
  // iterating (the 'dropboxLink' variable), and then
  // perform the expression following the fat arrow ('=>')
  // for each element of the array; finding the parentNode
  // and removing that child from the parentNode:
  dropboxLink => dropboxLink.parentNode.removeChild(dropboxLink));

<div class="link-container">
  <a data-source="attach" href="#">Attach</a>

  <a data-source="dropbox" href="#">Dropbox</a>
  <a data-source="google-drive" href="#">Google Drive</a>

  <a data-source="paste" href="#">Paste</a>
</div>





如果没有ES6,它会更加冗长:



var targets = document.querySelectorAll('a[data-source=dropbox]');


// using function.prototype.call() to allow us to use
// Array.prototype.slice() on the array-like NodeList,
// converting it into an Array:
Array.prototype.slice.call(targets)

  // using Array.prototype.forEach:
  .forEach(function(dropboxLink) {
    // 'dropboxLink' refers to the current Array element
    // of the Array over which we're iterating.

    // and, again, we remove the current Array-element
    // from its parentNode:
    dropboxLink.parentNode.removeChild(dropboxLink);
});

<div class="link-container">
  <a data-source="attach" href="#">Attach</a>

  <a data-source="dropbox" href="#">Dropbox</a>
  <a data-source="google-drive" href="#">Google Drive</a>

  <a data-source="paste" href="#">Paste</a>
</div>





参考文献:


Array.from()
Array.prototype.forEach()
Array.prototype.slice()
Arrow Functions
document.querySelectorAll()
Function.prototype.call()
Node.parentNode
Node.removeChild()

09-10 11:20
查看更多