So konvertieren Sie ein HTMLElement in eine Zeichenfolge


84

Ich werde ein XML-Element in JavaScript erstellen, um Daten mit der Serverseite auszutauschen. Ich habe festgestellt, dass ich es schaffen kann document.createElement. Aber ich weiß nicht, wie ich es in einen String konvertieren soll. Gibt es eine API im Browser, um dies zu vereinfachen? Oder gibt es eine JS-Bibliothek mit dieser API?

BEARBEITEN: Ich fand, dass die Browser-API XMLSerializer der richtige Weg sein sollte, um in Zeichenfolgen zu serialisieren.


Antworten:


38

Sie können das 'äußere HTML' erhalten, indem Sie das Element klonen, es einem leeren 'Offstage'-Container hinzufügen und das innerHTML des Containers lesen.

In diesem Beispiel wird ein optionaler zweiter Parameter verwendet.

Rufen Sie document.getHTML (element, true) auf, um die Nachkommen des Elements einzuschließen.

document.getHTML= function(who, deep){
    if(!who || !who.tagName) return '';
    var txt, ax, el= document.createElement("div");
    el.appendChild(who.cloneNode(false));
    txt= el.innerHTML;
    if(deep){
        ax= txt.indexOf('>')+1;
        txt= txt.substring(0, ax)+who.innerHTML+ txt.substring(ax);
    }
    el= null;
    return txt;
}

1
Sie können auch direkt anrufen domElement.outerHTML( w3schools.com/jsref/prop_html_outerhtml.asp )
user007

144

Die Elementeigenschaft outerHTML(Hinweis: wird von Firefox nach Version 11 unterstützt ) gibt den HTML-Code des gesamten Elements zurück.

Beispiel

<div id="new-element-1">Hello world.</div>

<script type="text/javascript"><!--

var element = document.getElementById("new-element-1");
var elementHtml = element.outerHTML;
// <div id="new-element-1">Hello world.</div>

--></script>

In ähnlicher Weise können Sie innerHTMLden in einem bestimmten Element enthaltenen innerTextHTML-Code oder den Text in einem Element abrufen (ohne HTML-Markup).

Siehe auch

  1. OuterHTML - Javascript-Eigenschaft
  2. Javascript Referenz - Elemente

Aber anscheinend kann ich den Innentext mit der Eigenschaft OuterHTML nicht erhalten. Ich denke, was ich wirklich will, ist das HTML-Markup.
Xiao 19


OuterHTML wird in fast allen modernen Browsern unterstützt: caniuse.com/#feat=mdn-api_element_outerhtml
Williams A.

1

Am einfachsten ist es, innerHTML dieses Elements in die Variable tmp zu kopieren und leer zu machen, dann ein neues Element anzuhängen und danach die Variable tmp zurück zu kopieren. Hier ist ein Beispiel, mit dem ich oben im Kopf ein Abfrageskript hinzugefügt habe.

var imported = document.createElement('script');
imported.src = 'http://code.jquery.com/jquery-1.7.1.js';
var tmpHead = document.head.innerHTML;
document.head.innerHTML = "";
document.head.append(imported);
document.head.innerHTML += tmpHead;

So einfach :)


0

Es gibt eine tagNameImmobilie und auch eine attributesImmobilie:

var element = document.getElementById("wtv");
var openTag = "<"+element.tagName;
for (var i = 0; i < element.attributes.length; i++) {
    var attrib = element.attributes[i];
    openTag += " "+attrib.name + "=" + attrib.value;
}
openTag += ">";
alert(openTag);

Siehe auch Wie werden alle Attribute in einem HTML-Element durchlaufen? (Ich tat!)

Um den Inhalt zwischen den Open- und Close-Tags abzurufen, können Sie ihn wahrscheinlich verwenden, innerHTMLwenn Sie nicht alle untergeordneten Elemente durchlaufen möchten ...

alert(element.innerHTML);

... und dann wieder das Close-Tag mit bekommen tagName.

var closeTag = "</"+element.tagName+">";
alert(closeTag);

Ich fürchte, es dauert manchmal, den Code zu schreiben, der das gesamte Markup erhält.
Xiao 19

Wenn es sich um XML handelt, sollte sich alles in einem Stammknoten befinden, ja? Wenn ja, müssen Sie dies nur für den Stammknoten tun - innerHTML wird von allen gängigen Browsern unterstützt und gibt Ihnen die im Stammknoten verschachtelte X (H) -TML. (dh alles!)
Richard JP Le Guen

1
Warum sollten Sie sich die Mühe machen, die Attribute des Elements zu durchlaufen und daraus ein String-Tag zu erstellen? Wickeln Sie das Element einfach in ein ANDERES Element und nehmen Sie das innerHTML dieses neuen übergeordneten Elements. Voila, sofortige Problemumgehung für OuterHTML.
Marc B

0

Dies gilt möglicherweise nicht für alle Fälle, aber beim Extrahieren aus XML hatte ich dieses Problem, das ich damit gelöst habe.

function grab_xml(what){
var return_xml =null;
    $.ajax({
                type: "GET",
                url: what,
                success:function(xml){return_xml =xml;},
        async:   false
        });
return(return_xml);
}

dann hol dir die xml:

var sector_xml=grab_xml("p/sector.xml");
var tt=$(sector_xml).find("pt");

Dann habe ich diese Funktion gemacht, um XML-Zeilen zu extrahieren, wenn ich aus einer XML-Datei lesen muss, die HTML-Tags enthält.

    function extract_xml_line(who){
    var tmp = document.createElement("div");
    tmp.appendChild(who[0]);
    var tmp=$(tmp.innerHTML).html();
    return(tmp);
}

und nun zum Schluss:

var str_of_html= extract_xml_line(tt.find("intro")); //outputs the intro tag and whats inside it: helllo  <b>in bold</b>

0

Ich benutzte Angular und brauchte dasselbe und landete auf diesem Posten.

@ViewChild('myHTML', {static: false}) _html: ElementRef;
this._html.nativeElement;

0

Angenommen, Ihr Element ist vollständig [object HTMLDocument]. Sie können es folgendermaßen in einen String konvertieren :

const htmlTemplate = `<!DOCTYPE html><html lang="en"><head></head><body></body></html>`;

const domparser = new DOMParser();
const doc = domparser.parseFromString(htmlTemplate, "text/html"); // [object HTMLDocument]

const doctype = '<!DOCTYPE html>';
const html = doc.documentElement.outerHTML;

console.log(doctype + html);

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.