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/

Pinkie
quelle
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();
Hussein
quelle
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?

ShaneBlake
quelle
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');
1,44 MB
quelle
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;
MikeM
quelle
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

Robert Noack
quelle
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.

prinsen
quelle
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);
Kevinji
quelle
0
var x = $($('div').html($('#container').clone())).html();
Kei
quelle
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

hassane86
quelle
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