Antworten:
Ich gehe davon aus, dass Sie nach der vollständigen HTML-Zeichenfolge fragen. Wenn dies der Fall ist, reicht so etwas aus:
$('<div>').append($('#item-of-interest').clone()).html();
Dies wird hier ausführlicher erläutert , aber im Wesentlichen erstellen Sie einen neuen Knoten, um das interessierende Element zu verpacken, die Manipulationen durchzuführen, es zu entfernen und den HTML-Code abzurufen.
Wenn Sie nur nach einer Zeichenfolgendarstellung suchen, gehen Sie mit new String(obj)
.
Ich habe die ursprüngliche Antwort im Jahr 2009 geschrieben. Ab 2014 unterstützen die meisten gängigen Browser outerHTML
eine native Eigenschaft (siehe z. B. Firefox und Internet Explorer ). Sie können also Folgendes tun:
$('#item-of-interest').prop('outerHTML');
$(...)
ist ein gültiger DOM-Knoten.)
data
Können Sie etwas genauer sein? Wenn Sie versuchen, den HTML- Code in ein Tag zu integrieren, können Sie Folgendes tun:
HTML-Snippet:
<p><b>This is some text</b></p>
jQuery:
var txt = $('p').html(); // Value of text is <b>This is some text</b>
Der beste Weg, um herauszufinden, welche Eigenschaften und Methoden einem HTML-Knoten (Objekt) zur Verfügung stehen, besteht darin, Folgendes zu tun:
console.log($("#my-node"));
Ab jQuery 1.6+ können Sie OuterHTML verwenden, um die HTML-Tags in Ihre Zeichenfolgenausgabe aufzunehmen:
var node = $("#my-node").outerHTML;
$('#my-node').get(0).outerHTML
wie in der Antwort von
.outerHTML
hat bei mir nicht funktioniert, aber .prop('outerHTML')
funktioniert.
jQuery ist hier oben, also:
jQuery.fn.goodOLauterHTML= function() {
return $('<a></a>').append( this.clone() ).html();
}
Gib all das HTML-Zeug zurück:
$('div' /*elys with HTML text stuff that you want */ ).goodOLauterHTML(); // alerts tags and all
Das scheint für mich gut zu funktionieren:
$("#id")[0].outerHTML
Die akzeptierte Antwort deckt keine Textknoten ab (undefiniert wird ausgedruckt).
Dieses Code-Snippet löst es:
var htmlElements = $('<p><a href="http://google.com">google</a></p>↵↵<p><a href="http://bing.com">bing</a></p>'),
htmlString = '';
htmlElements.each(function () {
var element = $(this).get(0);
if (element.nodeType === Node.ELEMENT_NODE) {
htmlString += element.outerHTML;
}
else if (element.nodeType === Node.TEXT_NODE) {
htmlString += element.nodeValue;
}
});
alert('String html: ' + htmlString);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Sie müssen nicht klonen und zum DOM hinzufügen, um .html () zu verwenden. Sie können Folgendes tun:
$('#item-of-interest').wrap('<div></div>').html()
wrap()
das umschlossene Element nicht zurück , nicht das Element, mit dem es umbrochen wurde? Dies sollte also das HTML des #item-of-interest
nicht übergeordneten div
Elements geben (es sei denn, jQuery wurde seit Februar 2012 geändert).
Wenn Sie ein HTML-Element stringifizieren möchten, um es irgendwo zu übergeben und an ein Element zurückzugeben, erstellen Sie eine eindeutige Abfrage für das Element:
// 'e' is a circular object that can't be stringify
var e = document.getElementById('MyElement')
// now 'e_str' is a unique query for this element that can be stringify
var e_str = e.tagName
+ ( e.id != "" ? "#" + e.id : "")
+ ( e.className != "" ? "." + e.className.replace(' ','.') : "");
//now you can stringify your element to JSON string
var e_json = JSON.stringify({
'element': e_str
})
als
//parse it back to an object
var obj = JSON.parse( e_json )
//finally connect the 'obj.element' varible to it's element
obj.element = document.querySelector( obj.element )
//now the 'obj.element' is the actual element and you can click it for example:
obj.element.click();