jQuery ruft HTML des Containers einschließlich des Containers selbst ab


156

Wie bekomme ich das HTML auf '#container' einschließlich '#container' und nicht nur was darin enthalten ist.

<div id="container">
 <div id="one">test 1 </div>
 <div id="two">test 2 </div>
 <div id="three">test 3 </div>
 <div id="four">test 4 </div>
</div>

Ich habe dies, das das HTML in #container bekommt. Das Element #container selbst ist nicht enthalten. Das ist es, was ich tun möchte

var x = $('#container').html();
$('#save').val(x);

Überprüfen Sie http://jsfiddle.net/rzfPP/58/


Sie könnten Container in einen anderen Container stellen und diese Container HTML bekommen ... aber das scheint ein wenig hacky. Vielleicht könnten wir eine praktikable Lösung finden, wenn wir etwas mehr über das Problem wüssten. Was machst du mit einem Textbereich voller HTML?
Patricia

Mögliches Duplikat des äußeren HTML-
Ian Mackinnon

Antworten:


160

Wenn Sie den Container in ein Dummy- PTag einschließen, erhalten Sie auch den HTML-Code des Containers.

Alles was Sie tun müssen, ist

var x = $('#container').wrap('<p/>').parent().html();

Überprüfen Sie das Arbeitsbeispiel unter http://jsfiddle.net/rzfPP/68/

Um unwrap()den <p>Tag , wenn Sie fertig, können Sie hinzufügen

$('#container').unwrap();

19
@ mc10 wir können einfach clone () verwenden und Sie müssen sich nicht um zusätzliche Elemente kümmern, die erstellt wurden. var x = $('#container').clone().wrap('<p/>').parent().html();. Die Idee des Wickelns ist großartig und viel weniger kompliziert als die meisten der angebotenen Lösungen.
Pinkie

Das Firefox-Problem ist veraltet, daher schlage ich vor, die @ MikeM-Antwort abzustimmen, da es sich um reines JS handelt.
Rob

6
Warum ein <p>Tag? Wäre das nicht <div>sinnvoller?
Martin Burch

6
Dies hat eine viel einfachere Lösung. Siehe meine Antwort.
1,44 MB

132
var x = $('#container').get(0).outerHTML;

UPDATE : Dies wird jetzt von Firefox ab FireFox 11 (März 2012) unterstützt.

Wie andere bereits betont haben, funktioniert dies in FireFox nicht. Wenn es in FireFox funktionieren soll, sollten Sie sich die Antwort auf diese Frage ansehen: Gibt es in jQuery eine Funktion, die HTML () oder Text () ähnelt, aber den gesamten Inhalt der übereinstimmenden Komponente zurückgibt?


6
Dies funktioniert in Firefox und ist ab sofort besser als die akzeptierte Lösung.
Luqita

Dies ist ein eleganter Weg, um das zu tun, besser als die akzeptierte Antwort, die nur ein schmutziger Hack war
Minhajul

Dies ist perfekt.
Gaurav Aggarwal

Dies ist die perfekte Antwort, da das Umschließen des übergeordneten Tags mit div oder p keine gute Idee ist. Möglicherweise wird Ihre CSS brechen. speziell wenn Sie Bootstrap verwenden (z. B. Formularzeile). Daher ist diese Antwort ziemlich gut.
Sudhir K Gupta

73

Ich benutze das gerne;

$('#container').prop('outerHTML');

7
Dies scheint mir die beste Lösung zu sein, erfordert keine Dom-Manipulation oder Pseudo-Dom-Manipulation (die Wrap-Methoden). Und das jquery-Objekt hat bereits die Eigenschaft.
Nieminen

1
liebe diese Lösung
Sameera Kumarasingha

69
var x = $('#container')[0].outerHTML;

1
Das Firefox-Problem ist veraltet, daher schlage ich vor, diese Antwort abzustimmen.
Rob

1
Die Verwendung von .clone () funktioniert, aber das ist viel sauberer, imo. Die akzeptierte Antwort erstellt neue Elemente im DOM = schlecht.
Peter

13
$('#container').clone().wrapAll("<div/>").parent().html();

Update: OuterHTML funktioniert jetzt unter Firefox. Verwenden Sie daher die andere Antwort, es sei denn, Sie müssen sehr alte Versionen von Firefox unterstützen


Die OuterHTML-Eigenschaft funktioniert unter Firefox nicht, daher müssen Sie sie mit dem Klon ausführen
Robert Noack

2

Alt aber gut...

Da der Benutzer nach jQuery fragt, werde ich es einfach halten:

var html = $('#container').clone();
console.log(html);

Geige hier.


2
Dies hilft nicht beim Abrufen des HTML-Codes des Containers. Es wird nicht einmal HTML-Code zurückgegeben. Ich kann sehen, dass es praktisch sein kann, über einen Klon auf den Zielknoten zuzugreifen, um eine Änderung des Doms zu vermeiden, aber dann wäre es gut zu erwähnen, warum Sie diese Methode verwenden.
AeonOfTime


0

Firefox unterstützt OuterHTML nicht. Sie müssen daher eine Funktion definieren , um dies zu unterstützen:

function outerHTML(node) {
    return node.outerHTML || (
        function(n) {
            var div = document.createElement('div');
            div.appendChild( n.cloneNode(true) );
            var h = div.innerHTML;
            div = null;
            return h;
        }
    )(node);
}

Dann können Sie OuterHTML verwenden:

var x = outerHTML($('#container').get(0));
$('#save').val(x);

0
var x = $($('div').html($('#container').clone())).html();

6
Sie erstellen 3 Abfrageobjekte in einer Anweisung. Obwohl es funktioniert, ist es ein Overkill.
Pinkie

-2

Einfache Lösung mit einem Beispiel:

<div id="id_div">
  <p>content<p>
</div>

Verschieben Sie diesen DIV mit id = "other_div_id" auf einen anderen DIV.

$('#other_div_id').prepend( $('#id_div') );

Fertig


Das OP fordert den durch ein jQuery-Objekt dargestellten unformatierten HTML-Code an, wobei diese Methode ein jQuery-Objekt von einem Ort an einen anderen verschiebt.
Simon Robb
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.