2016-11-20 81 views
-1

如何刪除指定的孩子?

<body> 
 
    <p>dfg</p> 
 
    <h1>yoyo</h1> 
 
    <h1>yoyo2</h1> 
 
    <ul> 
 
    <li>somo</li> 
 
    </ul> 
 
</body> 
 
    

比如我想從身體中刪除僅H1。其他孩子應該停留

+0

的[刪除由id元素(http://stackoverflow.com/questions/3387427/remove-element-by-id) –

+1

感謝可能的複製這個問題。我剛剛和我的十幾歲的兒子一起吃晚飯,並想知道同樣的事情。 :) – Paul

+1

什麼樣的父親會刪除他的孩子?甚至沒有命名它們......這太難過了 – Myst

回答

0

您可以使用getElementsByTagName拿到H1標籤,這是現場的的HTMLCollection(不是數組)。

當一個元素被刪除時,元素會相應地更新它們的索引,這意味着您必須從最後一個位置移除每個元素到第一個位置。

JavaScript解決方案:

var h1Elems = document.getElementsByTagName('h1'); 

for(var i = h1Elems.length - 1; i >= 0; i--){ 
    h1Elems[i].parentElement.removeChild(h1Elems[i]); 
} 

See this code working in this jsfiddle

+1

只要說'while(h1Elems.length)h1Elems [0] .remove();'會更簡單。 – 2016-11-20 03:05:56

+0

這是一個優雅的選擇,謝謝。 – Pineda

3

您可以使用CSS選擇器。

你可以使用jQuery或VanillaJS。例如,這裏是我的VanillaJS代碼。

var headers = document.querySelectorAll('h1'); 
headers.forEach(function(h) { h.remove(); }); 

這將有效地從DOM中刪除標題。

+0

是的,假設你在'querySelectorAll'的結果中定義'forEach'的環境中。 – 2016-11-20 03:02:45

+0

如果您無法訪問它,則可以使用jQuery(例如)爲您執行此操作,也可以使用polyfill。 – gretro

1

我們可以創建自己的FN按標籤的可用性刪除節點。請在此回顧之一:

function rem(tag) { 
 
    var h = document.querySelectorAll(tag); //return NodeList not array  
 
    [].forEach.call(h,function(elm) {    
 
     elm.parentNode.removeChild(elm); 
 
    }); 
 
} 
 

 
//passing tag to remove 
 
rem('p');
<body> 
 
    <p>dfg</p> 
 
    <h1>yoyo</h1> 
 
    <h1>yoyo2</h1> 
 
    <ul> 
 
    <li>somo</li> 
 
    </ul> 
 
</body>

+1

爲什麼'if(h.parentNode'檢查是必需的?你確定'forEach'會對'querySelectorAll'的結果起作用嗎? – 2016-11-20 03:04:05

+0

Thanks @torazaburo,我試了很多次以得到'if(h.parentNode )'return'false'但是失敗了。我剛剛編輯了我的答案,包括修復瞭如何通過'querySelectorAll'處理NodeList返回值。 – RizkiDPrast