我想删除其id名称包含字符串bs
的所有元素(假设它们都是div)。如何通过javascript执行此操作,无论它们是否是嵌套元素? (不是jquery)
<div id="new_bs_add"></div>
<div id="bsremove"></div>
<div id="somethingelse"></div>
... and many more
答案 0 :(得分:6)
没有jQuery,但如果支持CSS3选择器,你可以选择
var rem = document.querySelectorAll("[id*='bs']"), i = 0;
for (; i < rem.length; i++)
rem[i].parentNode.removeChild(rem[i]);
否则,只需稍微编辑一下VisioN的解决方案:
var divs = document.querySelectorAll("[id]");
for (var i = 0, len = divs.length; i < len; i++) {
var div = divs[i];
if (div.id.indexOf("bs") > -1) {
div.parentNode.removeChild(div);
}
}
答案 1 :(得分:4)
纯JavaScript:
var divs = document.getElementsByTagName("div");
for (var i = divs.length; i;) {
var div = divs[--i];
if (div.id.indexOf("bs") > -1) {
div.parentNode.removeChild(div);
}
}
例如,在 jQuery 中它是一行:
$("div[id*='bs']").remove();
答案 2 :(得分:3)
获取元素列表的最便携方法是document.getElementsByTagName
。但是,结果列表是实时节点列表,这意味着如果您修改文档,列表也会更改!
有两种解决方案。一个是获取列表的副本:
var nodes = document.getElementsByTagName('div');
var copy = [].slice.call(nodes, 0); // take a copy
for (var i = 0, n = copy.length; i < n; ++i) {
var d = copy[i];
if (d.parentNode && d.id.indexOf('bs') >= 0) {
d.parentNode.removeChild(d);
}
}
第二种方法是向后处理列表,或者如果修改列表,则确保不推进迭代器。采用后一种方法:
var nodes = document.getElementsByTagName('div');
for (var i = 0; i < nodes.length; /* blank */ ) {
var d = nodes[i];
if (d.id.indexOf('bs') >= 0) {
d.parentNode.removeChild(d);
} else {
++i; // iterate forward
}
}
答案 3 :(得分:0)
试试这段代码 首先获取所有元素包含某些文本(此处为'bs')
var matches = [];
var searchElements = document.getElementsByTagName("body")[0].children;
for(var i = 0; i < searchElements.length; i++) {
if(searchElements[i].tagName == 'DIV') {
if(searchElements[i].id.indexOf('bs') != -1) {
matches.push(searchElements[i]);
}
}
}
然后从html的正文中删除它们
for(var i = 0;i<matches.length; i++)
matches[i].parentNode.removeChild(matches[i]);
如果在第一个循环中删除它们,将会删除一些标记,因为每次删除节点时子数组的长度都会减少。所以更好的方法是将它们全部放在外部数组中然后删除它们。