Ich versuche, den HTML-Code eines ausgewählten Objekts mit jQuery abzurufen. Ich bin mir der .html()
Funktion bewusst ; Das Problem ist, dass ich den HTML-Code einschließlich des ausgewählten Objekts benötige (in diesem Fall eine Tabellenzeile, in der .html()
nur die Zellen innerhalb der Zeile zurückgegeben werden).
Ich habe mich umgesehen und ein paar sehr "hackische" Methoden gefunden, um ein Objekt zu klonen und es einem neu erstellten Div usw. hinzuzufügen, aber das scheint wirklich schmutzig zu sein. Gibt es einen besseren Weg oder bietet die neue Version von jQuery (1.4.2) irgendeine Art von outerHtml
Funktionalität?
$('div')[0].outerHTML
.Antworten:
2014 Bearbeiten: Die Frage und diese Antwort stammen aus dem Jahr 2010. Zu diesem Zeitpunkt war keine bessere Lösung allgemein verfügbar. Jetzt sind viele der anderen Antworten besser: Eric Hu oder Re Capcha zum Beispiel.
Diese Seite scheint eine Lösung für Sie zu haben: jQuery: OuterHTML | Yelotofu
quelle
outerHTML
dies in Firefox erst seit Version 11 (März 2012) unterstützt wird.outerHTML
ist ein von Microsoft erfundenes proprietäres Attribut, kein W3C-Standard. (Unterhaltsame Tatsache:innerHTML
ist erst seit HTML5 standardisiert )el.outerHTML || document.createElement('div').appendChild( el.cloneNode( true ) ).parentNode.innerHTML
Ich glaube, dass derzeit (01.05.2012) alle gängigen Browser die OuterHTML-Funktion unterstützen. Es scheint mir, dass dieses Snippet ausreicht. Ich persönlich würde dies auswendig lernen:
EDIT : Grundlegende Support-Statistiken für
element.outerHTML
quelle
Es muss keine Funktion dafür generiert werden. Mach es einfach so:
(Die Konsole Ihres Browsers zeigt übrigens an, was protokolliert wird. Die meisten der neuesten Browser seit etwa 2009 verfügen über diese Funktion.)
Die Magie ist dies am Ende:
Der Klon bedeutet, dass Sie das DOM nicht wirklich stören. Führen Sie es ohne aus und Sie werden sehen
p
Tags vor / nach allen Hyperlinks (in diesem Beispiel) eingefügt, was unerwünscht ist. Also ja, benutze.clone()
.Die Art und Weise, wie es funktioniert, ist, dass es jedes
a
Tag nimmt, einen Klon davon im RAM erstellt, mitp
Tags umschließt, das übergeordnete Element (dh dasp
Tag) abruft und dann das abruftinnerHTML
Eigenschaft davon abruft.BEARBEITEN : Hat Ratschläge eingeholt und
div
Tags inp
Tags geändert , da weniger getippt wird und dasselbe funktioniert.quelle
Was ist mit :
prop('outerHTML')
?Und zu setzen:
Es hat bei mir funktioniert.
PS : Dies wird in jQuery 1.6 hinzugefügt .
quelle
JQuery erweitern:
Und benutze es so:
$("#myTableRow").outerHTML();
quelle
return $('<div>').append(this.clone()).html();
Es ist nur ein bisschen mehr auf den Punkt.Ich stimme Arpan zu (13. Dezember 10, 5:59 Uhr).
Seine Art, es zu tun, ist tatsächlich eine VIEL bessere Art, es zu tun, da Sie keinen Klon verwenden. Die Klonmethode ist sehr zeitaufwändig, wenn Sie untergeordnete Elemente haben, und niemand schien sich darum zu kümmern, dass der IE tatsächlich das
outerHTML
Attribut hat (ja, der IE hat tatsächlich EINIGE nützliche Tricks im Ärmel).Aber ich würde sein Skript wahrscheinlich etwas anders erstellen:
quelle
clone()
undtextarea
brauchte ich eine Nicht-Klon-Lösung, und diese war genau richtig.outerHTML
sofern verfügbar, da diese zusätzlich zu Internet Explorer von Chrome unterstützt wird.Um wirklich jQuery-artig zu sein, möchten Sie vielleicht
outerHTML()
ein Getter und ein Setter sein und sein Verhalten so ähnlichhtml()
wie möglich gestalten:Dies ermöglicht es uns, ein Argument zu übergeben
outerHTML
, das sein kannfunction (index, oldOuterHTML) { }
- bei der der Rückgabewert zum neuen HTML-Code für das Element wird (sofern nichtfalse
zurückgegeben).Weitere Informationen finden Sie in den jQuery-Dokumenten für
html()
.quelle
Sie können auch get verwenden (Ruft die DOM-Elemente ab, die mit dem jQuery-Objekt übereinstimmen.).
z.B:
Als Erweiterungsmethode:
Oder
Multiple Choice und geben Sie das äußere HTML aller übereinstimmenden Elemente zurück.
Rückkehr:
quelle
Um ein FULL jQuery-Plugin als
.outerHTML
zu erstellen, fügen Sie jeder js-Datei das folgende Skript hinzu und fügen Sie es nach jQuery in Ihren Header ein:Auf diese Weise können Sie nicht nur die äußere HTML eines Elements abrufen, sondern sogar eine Array-Rückgabe mehrerer Elemente gleichzeitig erhalten! und kann in beiden jQuery-Standardstilen als solche verwendet werden:
Für mehrere Elemente
Snippet-Beispiele:
Code-Snippet anzeigen
quelle
Sie können es auch einfach so machen
Dabei ist id die ID des Elements, nach dem Sie suchen
quelle
$("#" + id).attr("id")
ist unglaublich überflüssig. Wenn Sie die ID bereits in einer Variablen haben, warum verwenden Sie einen JQuery-Selektor, um das Element aus dem Dom abzurufen und dann sein ID-Attribut abzufragen?Ich habe Jessicas Lösung (die von Josh bearbeitet wurde) verwendet, um OuterHTML für Firefox zum Laufen zu bringen. Das Problem ist jedoch, dass mein Code nicht funktioniert hat, weil ihre Lösung das Element in einen DIV eingewickelt hat. Das Hinzufügen einer weiteren Codezeile löste dieses Problem.
Der folgende Code gibt Ihnen das OuterHTML, wobei der DOM-Baum unverändert bleibt.
Und benutze es so: $ ("# myDiv"). OuterHTML ();
Hoffe jemand findet es nützlich!
quelle
Geige hier: http://jsfiddle.net/ezmilhouse/Mv76a/
quelle
Wenn das Szenario eine neue Zeile dynamisch anfügt, können Sie Folgendes verwenden:
.myrow
ist der Klassenname des<tr>
. Es erstellt eine Kopie der letzten Zeile und fügt diese als neue letzte Zeile ein. Dies funktioniert auch in IE7 , während die[0].outerHTML
Methode keine Zuweisungen in IE7 zulässtquelle
node.cloneNode () scheint kaum ein Hack zu sein. Sie können den Knoten klonen und an ein beliebiges übergeordnetes Element anhängen und ihn auch bearbeiten, indem Sie einzelne Eigenschaften bearbeiten, anstatt z. B. reguläre Ausdrücke darauf ausführen oder ihn dem DOM hinzufügen und dann nach den Wörtern ändern zu müssen.
Sie können jedoch auch die Attribute des Elements durchlaufen, um eine HTML-Zeichenfolgendarstellung zu erstellen . Es ist wahrscheinlich, dass auf diese Weise jede OuterHTML-Funktion implementiert wird, wenn jQuery eine hinzufügt.
quelle
Ich habe die von Jessica aktualisierte Volomike-Lösung verwendet. Fügen Sie einfach eine Überprüfung hinzu, um festzustellen, ob das Element vorhanden ist, und lassen Sie es leer zurückgeben, falls dies nicht der Fall ist.
Verwenden Sie es natürlich wie folgt:
quelle
Eine gute Option für .outerHTML () finden Sie hier https://github.com/darlesson/jquery-outerhtml .
Im Gegensatz zu .html (), das nur den HTML-Inhalt des Elements zurückgibt, gibt diese Version von .outerHTML () das ausgewählte Element und seinen HTML-Inhalt zurück oder ersetzt es als .replaceWith () -Methode, jedoch mit dem Unterschied, dass das Ersetzen von HTML von übernommen werden kann die Verkettung.
Beispiele finden Sie auch in der obigen URL.
quelle
Beachten Sie, dass Joshs Lösung nur für ein einzelnes Element funktioniert.
Wahrscheinlich macht "äußeres" HTML nur dann wirklich Sinn, wenn Sie ein einzelnes Element haben, aber es gibt Situationen, in denen es sinnvoll ist, eine Liste von HTML-Elementen zu erstellen und sie in Markups umzuwandeln.
Diese Lösung erweitert Joshs Lösung und behandelt mehrere Elemente:
Bearbeiten: Ein weiteres Problem mit Joshs Lösung wurde behoben, siehe Kommentar oben.
quelle
Eine andere ähnliche Lösung mit dem Hinzufügen
remove()
des temporären DOM-Objekts.quelle
Ich habe diesen einfachen Test durchgeführt, wobei OuterHTML eine Tokimon-Lösung (ohne Klon) und OuterHTML2 eine Jessica-Lösung (Klon) ist.
und das Ergebnis in meinem Chrom-Browser (Version 20.0.1132.57 (0)) war
OuterHTML: 81
ms OuterHTML2: 439 ms
aber wenn wir eine Tokimon-Lösung ohne die native OuterHTML-Funktion verwenden (die jetzt in wahrscheinlich fast jedem Browser unterstützt wird)
wir bekommen
OuterHTML: 594
ms OuterHTML2: 332 ms
und es wird mehr Schleifen und Elemente in Beispielen aus der realen Welt geben, also wäre die perfekte Kombination
Die Klonmethode ist also tatsächlich schneller als die Wrap / Unwrap-Methode
(jquery 1.7.2).
quelle
Hier ist ein sehr optimiertes OuterHTML-Plugin für JQuery: ( http://jsperf.com/outerhtml-vs-jquery-clone-hack/5 => Die beiden anderen Fast-Code-Snippets sind mit einigen Browsern wie FF <11 nicht kompatibel.)
@Andy E => Ich stimme dir nicht zu. OuterHMTL benötigt keinen Getter UND keinen Setter: jQuery gibt uns bereits 'replaceWith' ...
@mindplay => Warum trittst du allen OuterHTML bei? jquery.html gibt nur den HTML-Inhalt des FIRST-Elements zurück.
(Entschuldigung, ich habe nicht genug Ruf, um Kommentare zu schreiben.)
quelle
Kurz und bündig.
oder Ereignis süßer mit Hilfe von Pfeilfunktionen
oder überhaupt ohne jQuery
oder wenn Ihnen dieser Ansatz nicht gefällt, überprüfen Sie dies
quelle
Dies ist mit Vanille-JavaScript ganz einfach ...
quelle
Dies ist ideal zum Ändern von Elementen auf dem Dom, funktioniert jedoch NICHT, wenn Sie eine HTML-Zeichenfolge wie folgt in jquery übergeben:
Nach einigen Manipulationen habe ich eine Funktion erstellt, mit der die oben genannten Funktionen ausgeführt werden können, z. B. für HTML-Zeichenfolgen:
quelle
$.html = el => $("<div>"+el+"</div>").html().trim();
quelle
Ich bin darauf gestoßen, als ich nach einer Antwort auf mein Problem gesucht habe, nämlich, dass ich versucht habe, eine Tabellenzeile zu entfernen und sie dann wieder am Ende der Tabelle hinzuzufügen (weil ich dynamisch Datenzeilen erstellt habe, aber ein 'Neu hinzufügen' anzeigen wollte Geben Sie die Typzeile unten ein.
Ich hatte das gleiche Problem, da es das innerHtml zurückgab und daher die TR-Tags fehlten, die die ID dieser Zeile enthielten und bedeuteten, dass es unmöglich war, den Vorgang zu wiederholen.
Die Antwort, die ich gefunden habe, war, dass die jquery-
remove()
Funktion das Element, das sie entfernt, tatsächlich als Objekt zurückgibt. So einfach war es, eine Zeile zu entfernen und wieder hinzuzufügen ...Wenn Sie das Objekt nicht entfernen, sondern an eine andere
clone()
Stelle kopieren möchten, verwenden Sie stattdessen die Funktion.quelle
jQuery-Plugin als Abkürzung, um das gesamte Element HTML direkt abzurufen:
Und benutze es so:
$(".element").outerHTML();
quelle
Wobei 'x' die Knotennummer ist, beginnend mit 0 als erster, sollte der richtige Knoten erhalten, wenn Sie versuchen, einen bestimmten zu erhalten. Wenn Sie untergeordnete Knoten haben, sollten Sie wirklich eine ID auf die gewünschte setzen, um diese nur auf Null zu setzen. Mit dieser Methode und ohne 'x' hat es für mich gut funktioniert.
quelle
.html()
das angegebene Element. DAS FUNKTIONIERT und ich möchte eine Erklärung, warum es nicht funktioniert.Einfache Lösung.
quelle
Vielleicht verstehe ich Ihre Frage nicht richtig, aber dadurch wird das HTML des übergeordneten Elements des ausgewählten Elements abgerufen.
Ist es das, wonach du suchst?
quelle