Verwenden Sie Javascript, um rohen HTML-Code zu erhalten

8

Ich muss den tatsächlichen HTML-Code eines Elements auf einer Webseite erhalten.

Zum Beispiel, wenn der tatsächliche HTML-Code innerhalb des Elements "How to fix"

ist

Dieses Javascript wird ausgeführt getElementById ('myE'). innerHTML gibt mir "How to fix" , was die dekodierte Form

ist

Wie bekomme ich "How to fix" mit JavaScript?

    
Melina 11.10.2010, 10:08
quelle

2 Antworten

4

Was du hast, sollte funktionieren:

Elementtest:

%Vor%

JavaScript-Test:

%Vor%

Sie können es hier ausprobieren . Stellen Sie sicher, dass das Ergebnis, egal wo Sie mit verwenden, nicht   als Leerzeichen anzeigt, was wahrscheinlich der Fall ist. Wenn Sie es irgendwo für HTML anzeigen möchten, müssen Sie es umgehen.

    
Nick Craver 11.10.2010, 10:13
quelle
17

Sie können die tatsächliche HTML-Quelle eines Teils Ihrer Webseite nicht finden.

Wenn Sie einem Webbrowser eine HTML-Seite geben, analysiert er den HTML-Code in einige DOM-Knoten, die für den Browser die endgültige Version Ihres Dokuments darstellen. Das DOM behält die signifikanten Informationen aus dem HTML-ähnlichen, dass Sie das Unicode-Zeichen U + 00A0 Non-Breaking Space vor dem Wort fix verwendet haben - aber nicht die unerledigten Informationen, die Sie mit einem Entity-Verweis verwendet haben, anstatt nur zu tippen es roh (   ).

Wenn Sie den Browser nach dem innerHTML eines Elementknotens fragen, erhalten Sie nicht die ursprüngliche HTML-Quelle, die zum Erzeugen dieses Knotens analysiert wurde, da diese Informationen nicht mehr vorhanden sind. Stattdessen generiert es neuen HTML-Code aus den im DOM gespeicherten Daten. Der Browser entscheidet, wie diese HTML-Serialisierung formatiert wird. Verschiedene Browser erzeugen unterschiedliche HTML-Dateien, und es ist wahrscheinlich nicht so, wie Sie sie ursprünglich formatiert haben.

Insbesondere

  • Elementnamen können ober- oder unterseitig sein;

  • Attribute möglicherweise nicht in der gleichen Reihenfolge wie Sie sie im HTML angegeben;

  • Die
  • -Attribut-Quotierung stimmt möglicherweise nicht mit der in Ihrer Quelle überein. IE generiert oft nicht-quoted Attribute, die nicht einmal gültiges HTML sind; Alles, was Sie sicher sein können, ist, dass die innerHTML erzeugt sicher im selben Browser verwendet werden kann, indem Sie es in das innerHTML ; eines anderen Elements schreiben;

  • Es darf keine Entity-Referenzen für etwas anderes als Zeichen verwenden, die sonst nicht direkt in den Textinhalt aufgenommen werden könnten: Ampersands, less-thans und Attribut-Wert-Anführungszeichen. Anstatt   zurückzugeben, kann es einfach das rohe Zeichen   geben.

Sie können nicht sehen , dass dies ein nicht-brechendes Leerzeichen ist, aber es ist immer noch eins, und wenn Sie dieses HTML in ein anderes Element einfügen, wird es als eins fungieren. Sie sollten sich nirgends auf ein nicht-brechendes Leerzeichen verlassen können, das von entity-masked zu   ist ... wenn Sie dies tun, können Sie das aus irgendeinem Grund tun:

%Vor%

aber das geht nur von U + 00A0 und nicht von den anderen Tausenden von möglichen Unicode-Zeichen, also ist es ein bisschen fragwürdig.

Wenn Sie wirklich den tatsächlichen HTML-Quelltext Ihrer Seite benötigen, können Sie XMLHttpRequest auf Ihre eigene URL ( location.href ) setzen und die vollständige, nicht geparste HTML-Quelle in responseText erhalten. Es gibt fast nie einen guten Grund, dies zu tun.

    
bobince 11.10.2010 10:50
quelle

Tags und Links