2012-04-12 8 views
0

Beachten Sie Folgendes:Wie würde ich einen DOM-Knoten ersetzen und danach umbrechen?

Ich habe ein div, die ich mit einem Textfeld bin ersetzt wie:

var $targetDiv = $('#the-div'); 
var $newDiv = $('#the-new-div'); 

$targetDiv.replaceWith($newDiv); 

Welche drehen würde:

<div id="the-div"></div> 

in:

<div id="the-new-div"></div> 

Wie würde ich <div id="the-new-div"></div> in einem div, dasgenannt wird, wickeln?

So würde das Ergebnis sein:

<div id="the-new-div-wrapper"> 
<div id="the-new-div"> 
</div> 
</div> 

$targetDiv.replaceWith($newDiv).wrap('<div id="the-new-div-wrapper"' />') nicht zu funktionieren schien.

+0

ich die Apostrophe glauben nicht in der Verpackung html passen. –

Antwort

3

die Verpackung Haben erste

$targetDiv.wrap('<div id="the-new-div-wrapper" />').replaceWith($newDiv); 

Oder es in zwei Linien machen:

$targetDiv.replaceWith($newDiv); 
$newDiv.wrap('<div id="the-new-div-wrapper" />'); 

Fiddle

Es gibt auch einen Tippfehler in Ihrem Code: $targetDiv.replaceWith($newDiv).wrap('<div id="the-new-div-wrapper"' />') eine zusätzliche Apostroph ist, die sollte nicht da sein.

+0

Ich hätte schwören können, dass ich es ursprünglich so versucht habe. Naja. Du schlauer Mann, du. Vielen Dank! Ich werde akzeptieren, wenn das Limit abgelaufen ist. –

+2

Das Problem ist, dass die ReplaceWith das alte Div zurückgibt, nicht das neue. Also kettet den Wrap nach dem Ersetzen mit, wickelt tatsächlich den alten div ein, der nicht mehr existiert –

+0

@Stijn_d danke für die Erklärung! :) Kette von Ereignissen macht völlig Sinn, jetzt, wo ich daran denke ... –

2

versuchen diese

$targetDiv.replaceWith($newDiv.wrap('<div id="the-new-div-wrapper"' />')); 

den div vor der Menge tatsächlich wickeln würde das Ziel div ersetzen, aber das gleiche Ergebnis erzielen.

Siehe hier

http://jsfiddle.net/WgW6Y/