2010-11-19 76 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()