2009-11-19 11 views

Antwort

70

Erweiterung auf jldupont Antwort, könnten Sie eine Umschlingungselement on the fly erstellen:

var target = document.getElementById('myElement'); 
var wrap = document.createElement('div'); 
wrap.appendChild(target.cloneNode(true)); 
alert(wrap.innerHTML); 

ich das Element am Klonen zu vermeiden, um das Element in dem Dokument zu entfernen und wieder einsetzen. Dies kann teuer sein, wenn das Element, das Sie drucken möchten, einen sehr großen Baum darunter hat.

+0

Hallo - unter dem Strich ist dies wahrscheinlich meine beste Wahl. ein wenig vorsichtig, um Elemente zu lösen/anzubringen, kann ich das DOM nicht vermasseln, und ich erwarte nicht, dass es große Bäume gibt. –

+3

+1 für ausgezeichnet, aber zu wenig cloneNode – bobince

+0

Es sei denn * myElement * ist ein Element, das kein Kind eines div sein kann, wie ein li, Tabellenzeile oder Tabellenzelle und so weiter. – RobG

8

Zuerst auf Element setzen, die wickeln die div in Frage, legen ein id Attribut für das Element und dann getElementById auf sich aus: sobald Sie den lement haben, nur tun ‚e.innerHTML` den HTML-Code abrufen .

<div><span><b>This is in bold</b></span></div>

=> <div id="wrap"><div><span><b>This is in bold</b></span></div></div>

und dann:

var e=document.getElementById("wrap"); 
var content=e.innerHTML; 

Hinweis dass outerHTML nicht Cross-Browser kompatibel ist.

+0

Haben Sie tatsächlich die Frage gelesen? :) –

+2

ja ich habe die Frage gelesen ... hast du meine Antwort gelesen? – jldupont

+1

das Problem mit dem Holen der InnerHTML für die Eltern der Div ist, dass ich auch die InnerHTML für die Geschwister der div bekommen –

0
var el = document.getElementById('foo'); 
el.parentNode.innerHTML; 
+4

das wird mir auch jeden HTML-Code für die Geschwister des Divs geben, richtig? –

+0

Das stimmt. Guter Punkt. –

+0

Was ist los mit der Down-Abstimmung? Die ursprüngliche Frage hatte nichts mit Geschwistern zu tun. Diese Antwort war angesichts des ursprünglichen Zusammenhangs der Frage eine absolut gültige Antwort. –

60

Verwenden outerHTML:

var el = document.getElementById('foo'); 
alert(el.outerHTML); 
+0

ist das Cross-Browser? – jldupont

+2

Nein, es ist eine IE-Erweiterung. Obwohl es Firefox Workarounds gibt: http://snipplr.com/view/5460/outerhtml-in-firefox/ – Wim

+0

Hmm, nicht sicher - es funktioniert sicherlich in Opera und IE. – Majkel

2

als Outerhtml nur IE, diese Funktion:

function getOuterHtml(node) { 
    var parent = node.parentNode; 
    var element = document.createElement(parent.tagName); 
    element.appendChild(node); 
    var html = element.innerHTML; 
    parent.appendChild(node); 
    return html; 
} 

erzeugt ein Schein leeres Element des Typs Mutter und verwendet innerHTML- darauf und dann fügt das Element wieder in das normale Dom

2

Sie werden so etwas für das t wollen o Cross-Browser sein.

function OuterHTML(element) { 
    var container = document.createElement("div"); 
    container.appendChild(element.cloneNode(true)); 

    return container.innerHTML; 
} 
+1

Dies würde "Element" aus dem Dokument entfernen, wenn sie aufgerufen wird, oder? –

+0

Es hätte, das jetzt durch das Hinzufügen von cloneNode behoben, was es mit einigen der anderen Antworten hier ziemlich identisch macht. –

3

Wenn Sie einen leichten Fußabdruck wollen, aber eine längere Skript, erhalten die Elemente innerHTML- und nur erstellen und klonen die leer Eltern-

0

definiert Funktion Outerhtml basierend auf Unterstützung für element.outerHTML:

2
var x = $('#container').get(0).outerHTML; 
Verwandte Themen