2012-02-21 73 views
16

我有一個包裝裏面有幾個子div和標籤裏面的子div。我想刪除包裝div。我已經考慮過JQuery的解包,但看起來好像我需要指定子div來告訴Jquery解開什麼。如果有幾個孩子,這會工作嗎?刪除包裝div並保留所有子div完整?

所以,代碼如下:

<div id="wrapper"> 
    <div id="innerDiv1"></div> 
    <div id="innerDiv2"></div> 
    <div id="innerDiv3"></div> 
</div> 

任何幫助,一如既往,表示讚賞。

謝謝。

回答

27

unwrap方法將正常工作(可以選擇任何/任意數量的兄弟姐妹的):

$("#innerDiv1").unwrap(); 

從文檔(強調):

匹配的元素(和他們的兄弟姐妹(如果有的話))在DOM結構中替換它們的父母代 。

+1

謝謝@James Allardice。儘管我檢查了JQuery文檔,但我不知何故錯過了「和他們的兄弟姐妹」部分。我猜,我有點茫然。 – 2012-02-21 23:03:24

+0

@robertsmith - 沒問題,很高興我可以幫助:) – 2012-02-21 23:06:55

5

要添加到@詹姆斯

你可以做這樣的事情

var innerDivs = $("#wrapper").html(); 
$("#wrapper").remove(); 
$("body").append(innerDivs);​ // you will need to change this to append to whatever element you like 

的jsfiddle例如

http://jsfiddle.net/dAZ9D/

+2

你可以做到這一點,但是你會失去任何綁定到'#wrapper'的孩子的事件處理程序,因爲這些元素完全從DOM中刪除,然後再次添加。使用'unwrap'方法將保留那些事件處理程序,因爲元素永遠不會從DOM中移除。 – 2012-02-21 22:54:34

+0

是的,這是正確的詹姆斯,但他沒有具體詢問是否要維護甚至處理程序。這就是爲什麼我說「添加到詹姆斯答案」:)乾杯! – 2012-02-21 22:55:47

+0

我知道,只是指出它的情況:) – 2012-02-21 22:56:37

0
function unwrap(el){ 
    var parent = el.parentNode; // get the element's parent node 
    while (el.firstChild){ 
     parent.insertBefore(el.firstChild, el); // move all children out of the element 
    } 
    parent.removeChild(el); // remove the empty element 
} 

的代碼是直線前進和多快於相應的jQ uery的方法$ .unwrap()。

來源:https://plainjs.com/javascript/manipulation/unwrap-a-dom-element-35/