388 Stimmen

jQuery: outer html()

Stellen Sie sich vor, wir hätten etwas Ähnliches:

<div id="xxx"><p>Hello World</p></div>

wenn wir die Funktion .html auf diese Weise aufrufen:

$("#xxx").html();

werden wir bekommen:

<p>Hello World</p>

Aber ich muss sie bekommen:

<div id="xxx"><p>Hello World</p></div>

Also, was muss ich tun? Ich denke, einen anderen Wrapper um #xxx hinzufügen, aber das ist keine gute Idee.

14 Stimmen

Jeder, der outerHTML nicht lesen, sondern schreiben möchte, sollte $(sel).replaceWith() verwenden.

1 Stimmen

Rbdev: Besteht die Möglichkeit, die richtige Antwort hier zu ändern?

1333voto

Andy Punkte 29246

Verwenden Sie einfach die Standard-DOM-Funktionalität:

$('#xxx')[0].outerHTML

Oder ein bisschen einfacher mit .prop() :

$('#xxx').prop('outerHTML')

outerHTML wird gut unterstützt - überprüfen Sie unter Mozilla o caniuse .

309 Stimmen

Eine andere Möglichkeit: $('#xxx').prop('outerHTML')

0 Stimmen

Das ist bei weitem die eleganteste Lösung. Mein einziger (kleiner) Kritikpunkt ist, dass man das erste Element ansprechen muss. Ich wünschte, jquery hätte $el.outerHTML();

1 Stimmen

Ich bevorzuge diese Variante: $('#xxx').get(0).outerHTML;

217voto

David Tang Punkte 89390

Erstellen Sie ein temporäres Element, dann clone() y append() :

$('<div>').append($('#xxx').clone()).html();

1 Stimmen

Muss man es tatsächlich klonen? Wird z. B. durch das Anhängen eines Elements an ein losgelöstes Element dieses aus dem DOM entfernt?

6 Stimmen

@jamietre, ja weil .append() wird immer umziehen das Element.

0 Stimmen

@jamietre warum ist die Antwort von ezmilhouse nicht universell richtig? Ich denke, es wäre schneller, zu wickeln und dann zu klonen. Es sei denn, Sie wollen nicht, dass das Wrapping auf das DOM angewendet wird; aber wenn Sie an einem temporären Objekt arbeiten, wird es ohnehin nicht sichtbar sein.

83voto

ezmilhouse Punkte 8563

Keine Geschwisterlösung:

var x = $('#xxx').parent().html();
alert(x);

Universelle Lösung:

// no cloning necessary    
var x = $('#xxx').wrapAll('<div>').parent().html(); 
alert(x);

Hier fummeln: http://jsfiddle.net/ezmilhouse/Mv76a/

31 Stimmen

Funktioniert nicht, wenn der Elternteil andere Kinder hat.

0 Stimmen

...und was, wenn $('#xxx') Geschwister hat?

0 Stimmen

Funktioniert nicht in allen Fällen, siehe jsfiddle.net/markcoleman/YtTdd/1

-10voto

Steve Kelly Punkte 371

Wenn Sie keinen Wrapper hinzufügen möchten, können Sie den Code einfach manuell hinzufügen, da Sie die ID kennen, auf die Sie abzielen:

var myID = "xxx";

var newCode = "<div id='"+myID+"'>"+$("#"+myID).html()+"</div>";

3 Stimmen

Was, wenn es sich nicht um eine div ?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X