如何通过多个 class 名称查找和删除 DOM 元素
How to find and remove DOM elements by multiple class names
我写了一个函数来删除所有带有某个class的元素。我试图制作函数以便我可以输入多个 classes,除以'|'唱。
不知怎么的,它不能正常工作,有些元素被删除了,有些没有...
有人可以告诉我我做错了什么吗?
function removeElement(classNames){
var classNamesArray = classNames.split("|");
for (var i = 0; i < classNamesArray.length; i++) {
alert(classNamesArray[i]);
var elements = document.getElementsByClassName(classNamesArray[i])
for (var j = 0; j < elements.length; j++){
alert(elements[j]);
elements[j].remove();
}
}
}
<div class="admin">test div1</div>
<div class="admin">test div2</div>
<div class="normal">test div3</div>
<div class="admin">test div4</div>
<span class="admin">test span1</span>
<div class="admin normal">test div1</div>
<div class="admin">test div2</div>
<div class="normal">test div3</div>
<div class="admin">test div4</div>
<span class="admin">test span1</span>
<br>
<button onClick="removeElement('admin|normal')">do it now!</button>
当您删除一个元素时,您会忘记元素数组正在变短。
将您的第二个 FOR 循环更改为从数组末尾开始的 运行,如下所示:
for (var j = elements.length; j > 0; j--){
使用Jquery。现在会更容易。
因此,您的函数变为:
function removeElement(classNames){
var classNamesArray = classNames.split("|");
$.each( classNamesArray , function( key, value ) {
$("."+key).remove();
});
如何select和删除多个类
的元素
要查找一组 类 的所有元素,只需使用 querySelectorAll
方法和 类 的逗号分隔列表。此方法将 return 包含所有匹配元素的 nodeList
,然后您可以将其循环并从 DOM.
中删除
例如:
// Select all elements of class1 and/or class2 and/or class3
var elementsOfMultipleClasses = document.querySelectorAll('.class1, .class2, .class3');
// Remove all matching elements
[].forEach.call(elementsOfMultipleClasses, function(element) { element.remove(); });
如何将其变成可重复使用的函数
如果你想把它做成一个可重复使用的函数,你可以使用map
和join
方法把一个类的数组变成多个类 select或:
function removeElementsOfMultipleClasses(classesList) {
// Invalid classes list
if (!classesList || !classesList.length) return false;
// Generate a comma-separated multiple classes selector
// For example, '.class1, .class2, .class3'
var classesSelector = (classesList.map(function(value) { return '.'+value })).join(',');
// Find and remove all matching elements
[].forEach.call(document.querySelectorAll(classesSelector),
function(element) { element.remove(); }
);
}
我写了一个函数来删除所有带有某个class的元素。我试图制作函数以便我可以输入多个 classes,除以'|'唱。
不知怎么的,它不能正常工作,有些元素被删除了,有些没有... 有人可以告诉我我做错了什么吗?
function removeElement(classNames){
var classNamesArray = classNames.split("|");
for (var i = 0; i < classNamesArray.length; i++) {
alert(classNamesArray[i]);
var elements = document.getElementsByClassName(classNamesArray[i])
for (var j = 0; j < elements.length; j++){
alert(elements[j]);
elements[j].remove();
}
}
}
<div class="admin">test div1</div>
<div class="admin">test div2</div>
<div class="normal">test div3</div>
<div class="admin">test div4</div>
<span class="admin">test span1</span>
<div class="admin normal">test div1</div>
<div class="admin">test div2</div>
<div class="normal">test div3</div>
<div class="admin">test div4</div>
<span class="admin">test span1</span>
<br>
<button onClick="removeElement('admin|normal')">do it now!</button>
当您删除一个元素时,您会忘记元素数组正在变短。
将您的第二个 FOR 循环更改为从数组末尾开始的 运行,如下所示:
for (var j = elements.length; j > 0; j--){
使用Jquery。现在会更容易。
因此,您的函数变为:
function removeElement(classNames){
var classNamesArray = classNames.split("|");
$.each( classNamesArray , function( key, value ) {
$("."+key).remove();
});
如何select和删除多个类
的元素要查找一组 类 的所有元素,只需使用 querySelectorAll
方法和 类 的逗号分隔列表。此方法将 return 包含所有匹配元素的 nodeList
,然后您可以将其循环并从 DOM.
例如:
// Select all elements of class1 and/or class2 and/or class3
var elementsOfMultipleClasses = document.querySelectorAll('.class1, .class2, .class3');
// Remove all matching elements
[].forEach.call(elementsOfMultipleClasses, function(element) { element.remove(); });
如何将其变成可重复使用的函数
如果你想把它做成一个可重复使用的函数,你可以使用map
和join
方法把一个类的数组变成多个类 select或:
function removeElementsOfMultipleClasses(classesList) {
// Invalid classes list
if (!classesList || !classesList.length) return false;
// Generate a comma-separated multiple classes selector
// For example, '.class1, .class2, .class3'
var classesSelector = (classesList.map(function(value) { return '.'+value })).join(',');
// Find and remove all matching elements
[].forEach.call(document.querySelectorAll(classesSelector),
function(element) { element.remove(); }
);
}