通过类名删除元素?

我有下面的代码来find他们的类名称的元素:

// Get the element by their class name var cur_columns = document.getElementsByClassName('column'); // Now remove them for (var i = 0; i < cur_columns.length; i++) { } 

我只是不知道如何删除他们…..我必须引用父母或什么? 处理这个问题的最好方法是什么?

@ Karim79:

这是JS:

 var col_wrapper = document.getElementById("columns").getElementsByTagName("div"); var len = col_wrapper.length; alert(len); for (var i = 0; i < len; i++) { if (col_wrapper[i].className.toLowerCase() == "column") { col_wrapper[i].parentNode.removeChild(col_wrapper[i]); } } 

这里是HTML:

 <div class="columns" id="columns"> <div class="column"><input type="checkbox" name="col_list[]" value="cows">cows</div> <div class="column"><input type="checkbox" name="col_list[]" value="cows">cows</div> <div class="column"><input type="checkbox" name="col_list[]" value="cows">cows</div> <div class="column"><input type="checkbox" name="col_list[]" value="cows">cows</div> <div name="columnClear" class="contentClear" id="columnClear"></div> </div> 

编辑:结束了刚刚使用jQuery选项。

使用jQuery(你真的可以在这种情况下使用,我想),你可以这样做:

 $('.column').remove(); 

否则,您将需要使用每个元素的父项来移除它:

 element.parentNode.removeChild(element); 

如果您不想使用JQuery:

 function removeElementsByClass(className){ var elements = document.getElementsByClassName(className); while(elements.length > 0){ elements[0].parentNode.removeChild(elements[0]); } } 

Brett – 你知道从IE 5.5到8的getElementyByClassName支持不是根据quirksmode吗? 如果您关心跨浏览器兼容性,那么您最好遵循以下模式:

  • 通过ID获取容器元素。
  • 通过标签名称获取所需的子元素。
  • 迭代孩子,testing匹配的className属性。
  • elements[i].parentNode.removeChild(elements[i])像其他人一样说。

快速示例:

 var cells = document.getElementById("myTable").getElementsByTagName("td"); var len = cells.length; for(var i = 0; i < len; i++) { if(cells[i].className.toLowerCase() == "column") { cells[i].parentNode.removeChild(cells[i]); } } 

这是一个快速演示。

编辑:这是固定的版本,具体到您的标记:

 var col_wrapper = document.getElementById("columns").getElementsByTagName("div"); var elementsToRemove = []; for (var i = 0; i < col_wrapper.length; i++) { if (col_wrapper[i].className.toLowerCase() == "column") { elementsToRemove.push(col_wrapper[i]); } } for(var i = 0; i < elementsToRemove.length; i++) { elementsToRemove[i].parentNode.removeChild(elementsToRemove[i]); } 

问题是我的错; 当从结果元素数组中移除元素时,长度会发生变化,所以每次迭代时都会跳过一个元素。 解决scheme是将每个元素的引用存储在临时数组中,然后循环遍历这些元素,从DOM中删除每个元素。

在这里尝试。

使用ES6你可以这样做:

 const removeElements = (elms) => Array.from(elms).forEach(el => el.remove()); // Use like: removeElements( document.querySelectorAll(".remove") ); 
 <p class="remove">REMOVE ME</p> <p>KEEP ME</p> <p class="remove">REMOVE ME</p> 

没有jQuery,你可以这样做:

 const elements = document.getElementsByClassName("my-class"); while (elements.length > 0) elements[0].remove(); 

是的,你必须从父母中删除:

 cur_columns[i].parentNode.removeChild(cur_columns[i]); 

如果你想删除dynamic添加的元素,请尝试以下操作:

 document.body.addEventListener('DOMSubtreeModified', function(event) { const elements = document.getElementsByClassName('your-class-name'); while (elements.length > 0) elements[0].remove(); }); 

你可以使用这个语法: node.parentNode

例如:

 someNode = document.getElementById("someId"); someNode.parentNode.removeChild(someNode); 

你应该尝试jQuery,select元素并编辑它们会更容易。

用jQuery你的代码应该看起来像这样:

 $( document ).ready( function() { // Select all elements with class name 'className' and remove them $( ".className" ).remove(); }); 

你可以而不是删除你可以改变CSS的显示属性为none!

 // Get the element by their class name var cur_columns = document.getElementsByClassName('column'); // Now remove them cur_columns.style.display= "none"; 

我希望它有帮助!

在这个跳过元素错误(代码从上面)

 var len = cells.length; for(var i = 0; i < len; i++) { if(cells[i].className.toLowerCase() == "column") { cells[i].parentNode.removeChild(cells[i]); } } 

可以通过向后运行循环来修复,如下所示(这样临时数组就不需要了)

 var len = cells.length; for(var i = len-1; i >-1; i--) { if(cells[i].className.toLowerCase() == "column") { cells[i].parentNode.removeChild(cells[i]); } } 

您可以使用简单的解决scheme,只需更改类,HTML收集filter即可更新:

 var cur_columns = document.getElementsByClassName('column'); for (i in cur_columns) { cur_columns[i].className = ''; } 

参考文献: http : //www.w3.org/TR/2011/WD-html5-author-20110705/common-dom-interfaces.html