2010-11-19 79 views
40

我有一个窗体有几个跨度与id =“myid”。我希望能够从DOM中删除所有具有此ID的元素,并且我认为jQuery是最好的方式。我想通了如何使用$一个.remove()方法来删除该ID的一个实例,通过简单地做:使用jquery删除给定ID的所有元素

$('#myid').remove() 

当然,只有消除身份识别码的第一个实例,但是。如何迭代myid的所有实例并将其全部移除?我认为jquery $ .each()方法可能是这样的,但我无法弄清楚遍历myid的所有实例并删除它们的语法。

如果有一个干净的方法来做到这一点与普通的JS(不使用jQuery)我也打开了。也许问题是,ID应该是唯一的(即你不应该有多个ID =“myid”的元素)?

感谢,

克里斯

+0

请尝试我张贴在下面的代码段,它应该工作。 – ace 2010-11-19 08:41:56

+0

“具有给定ID的所有元素”在我的大脑中伤害。 ID应该是独一无二的。 – domih 2016-02-22 15:47:22

回答

52

.remove()应该将它们全部删除。我认为问题在于你使用的是ID。只应该是一个 HTML元素在页面上有一个特定的ID,所以jQuery正在优化,而不是全部搜索它们。改为使用

+0

再一次,非常感谢你们! – Chris 2010-11-19 08:27:25

35

你所有的元素应该有一个唯一的ID,所以不应该有一个以上的元素与#myid

的“ID”是一个唯一的标识符。每次在文档中使用该属性时,它都必须具有不同的值。如果您使用此属性作为样式表的钩子,则可能比使用类(它们用于标识一个元素)更适合使用类(该组元素)。

Neverthless,试试这个:

$("span[id=myid]").remove(); 
+1

这是最完美的答案。 – 2013-02-26 13:14:55

12

dom元素喊的ID是唯一的。改用班级(<span class='myclass'>)。 要删除所有跨度与这个类:

$('.myclass').remove() 
0

前面已经说过,只有一个元素可以有一个特定的ID。改用类。这里是jQuery的免费版本删除节点:

var form = document.getElementById('your-form-id'); 
var spans = form.getElementsByTagName('span'); 

for(var i = spans.length; i--;) { 
    var span = spans[i]; 
    if(span.className.match(/\btheclass\b/)) { 
     span.parentNode.removeChild(span); 
    } 
} 

getElementsByTagNameis the most cross-browser-compatible method,可以在这里使用。 getElementsByClassName会好很多,但不支持Internet Explorer < = IE 8。

Working Demo

如果你想匹配ID部删除所有的元素,例如
7

<span id='myID_123'> 
<span id='myID_456'> 
<span id='myID_789'> 

试试这个:

$("span[id*=myID]").remove(); 

不要忘了 '*' - 这将立即删除它们 - 欢呼声

Working Demo

5

对于多个元素,您应该使用class,因为id仅用于表示单个元素。为了虽然回答您的.each()语法问题,这是它会是什么样子:

$('#myID').each(function() { 
    $(this).remove(); 
}); 

官方jQuery文档here

5

最干净的方法是使用html5选择器API,特别是querySelectorAll()

var contentToRemove = document.querySelectorAll("#myid"); 
$(contentToRemove).remove(); 

querySelectorAll()函数返回与特定id匹配的dom元素数组。一旦您将返回的数组分配给var,那么您可以将它作为参数传递给jquery remove()