2012-02-21 15 views
16

Mam jedno opakowanie div z wieloma elementami pod-div wewnątrz i znacznikami wewnątrz tych elementów podrzędnych. Chcę usunąć opakowanie div. Rozważałem rozpakowywanie JQuery, ale wydaje mi się, że muszę określić elementy div, aby powiedzieć Jquery'owi, co należy rozwinąć. Czy to zadziała, jeśli będzie kilkoro dzieci?usunąć div opakowywania i pozostawić wszystkie sub-div nienaruszone?

Więc, kod wygląda następująco:

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

Każda pomoc, jak zawsze, jest doceniana.

Dziękuję.

Odpowiedz

27

Sposób unwrap będzie działać dobrze (można wybrać dowolny/dowolnej liczby rodzeństwa):

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

Od docs (podkreślenie dodane):

dopasowanych elementów (i ich rodzeństwo, jeśli w ogóle istnieje) zastępuje swoich rodziców w strukturze DOM.

+1

Dzięki @James Allardice. Mimo że sprawdziłem dokumenty JQuery, w jakiś sposób opuściłem część "i ich rodzeństwo". Wydaje mi się, że mam trochę przymglonych oczu. –

+0

@robertsmith - Nie ma problemu, cieszę się, że mogłem pomóc :) –

5

Aby dodać do @james

można zrobić coś takiego

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

jsfiddle przykład

http://jsfiddle.net/dAZ9D/

+2

Można to zrobić, ale straciłbyś wszystkie programy obsługi zdarzeń powiązane z dziećmi '# wrapper', ponieważ elementy zostały całkowicie usunięte z DOM, a następnie dodane ponownie. Użycie metody 'unwrap' zachowa procedury obsługi zdarzeń, ponieważ elementy nie są nigdy usuwane z DOM. –

+0

yes thats right james, ale nie pyta konkretnie, czy należy zachować obsługę, czy nie. To dlatego powiedziałem "dodaj do odpowiedzi Jamesa" :) Pozdrawiam! –

+0

Wiem, po prostu pokazuję to na wszelki wypadek :) –

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 
} 

Kod jest prosta i znacznie szybszy niż odpowiedni jQ Metoda uery $ .unwrap().

Źródło: https://plainjs.com/javascript/manipulation/unwrap-a-dom-element-35/

Powiązane problemy