Serialisieren von HTML

Nun wenden wir uns auf die Serialisierung HTML richtig in der modernen Web-Anwendungen, die rund um einige der Einschränkungen Sie mit konfrontiert. Problem Einige der DOM-Eigenschaften aufweisen inkonsistenten Verhalten insbesondere die Eigenschaft innerHTML. InnerHTML Der Zweck ist es, das Kind zu extrahieren Elemente eines HTML-Elements in einem String-Form. Das Problem ist, dass die Eigenschaft innerHTML nicht das korrekte Text. Sie müssen dies zu umgehen. Theory zu verstehen, wo die innerHTML-Eigenschaft nicht, lassen Sie uns anhand einiger Beispiele aus der Arbeit und schrittweise zeigen, wo das Problem liegt. Das Beispiel, das veranschaulicht wird, ist das dynamische Hinzufügen einer Taste und Textfeld. Der Quellcode für das Beispiel ist wie folgt.

 Quelle: / website / ROOT / Ajax / DHTML / inconsistent.html  Inkonsistent. InnerHTML 

  

Die Funktion DOMInserted fügt die Taste und Text auf die div-Element mit der ID dynamicallyinserted. Die div-Element mit der ID dynamicallyinserted hat keine Kind-Elemente. Wenn also innerHTML genannt wurden, die zurückgegebene Zeichenfolge würde keinen Text enthalten. Wenn Anwender die Taste drücken dynamisch einzufügen, wird die Funktion DOMInserted aufgerufen. Verwenden Sie die gleiche HTML-Element-Eingang zu schaffen, entweder eine Schaltfläche oder ein Textfeld ein. Was unterscheidet eine Schaltfläche aus einem Textfeld wird der Wert der Immobilie Typ. Um ein input-Element-Instanz zu erzeugen, verwenden Sie die Methode document.createElement. Sobald das Element beispielsweise wurde instanziiert und zugeordnet, fügen Sie sie in den div-Element mit der appendChild-Methode.

Nachdem beide Input-Instanzen müssen die div-Element hinzugefügt wurde, können Sie innerHTML den Wert seiner Kind-Elemente in HTML abzurufen. Der Wert von innerHTML ist es, die textarea-Element zugeordnet, die rohen HTML-Wert zu veranschaulichen. Der Fehler besteht darin, dass kein Wert Attribut vorhanden ist. In der Tat ist der Wert Attribut vorhanden ist, weil Sie es in das Skript zugewiesen und zeigte sie in der HTML-, sondern im Hinblick auf die Eigenschaft innerHTML, wird der Wert Attribut nicht vorhanden ist. Internet Explorer erzeugt die richtige Ausgabe. Running den gleichen Code in Opera erzeugt den gleichen Fehler wie in Mozilla. Ein DHTML-Benutzeroberfläche ist vollständig dynamisch, so dass alle Änderungen, die Benutzer oder das Skript muss in der Eigenschaft zum Ausdruck kommen. Solution Der Rest dieses Artikels konzentriert sich auf, wie die Serialisierung Problem der HTML-Elemente zu lösen. Die Lösung ist so einfach in den Puffer zu erzeugen, müssen Sie alle Elemente einzeln zu durchlaufen und einen langen Puffer erzeugen. Der folgende Code zeigt die komplette Lösung.

 Quelle: 

Die Funktion Rekursive dient dazu, die einzelnen Elemente zu durchlaufen und kann mit allen Browsern genutzt werden. Die rekursive Funktion hat einen einzigen Parameter, die ein Objekt Instanz, die Eigenschaften und Methoden werden prüfte sich darstellt. Die Serialisierung unterstützt nur zwei Typen von Knoten (element.nodeType): 1 und 3. Wenn Sie nicht wissen, was die verschiedenen Arten von Knoten, so sind die Nummern 1 und 3 werden nicht zu helfen. Typ-1-Knoten stellt eine Plain-Vanilla-HTML-Element, Knoten und Typ 3 ist ein Stück Text. Die Serialisierung ignoriert Kommentare, Seite Richtlinien und dergleichen, weil sie im allgemeinen sind nicht wichtig, die Serialisierung. Wenn der Knoten Typ 1 ist, wird ein Puffer für das Element-ID und allen zugehörigen Attribute generiert. Man sollte meinen, dass die Iteration alle Attribute der Wert Attribut umfassen würde. Für alle anderen Browser als Internet Explorer, die Attribute, die in der element.attributes Array vorhanden sind, hängt von der Art des Attributs.

Abhängig von der Art der Eingabe Element könnte der Wert Attribut nicht Teil der Liste, dh es ist nicht zugänglich. Es bedeutet auch, dass Sie verweisen sie direkt mit der Notation element.value benötigen. Die Tatsache, dass einige Elemente angezeigt werden und andere nicht ist ein wenig beunruhigend, weil man sich fragen, was links im Browser versteckt. Wenn Sie genau hinsehen auf Source-Code und die generierte Ausgabe der Widerspruch HTML-Seite, werden Sie feststellen, dass der Browser Handhabung sind ein Attribut nicht einheitlich: Sie sind fehlt der onclick-Handler für die dynamisch generierten Button-Element. Das onclick-Attribut ist für die statisch definierte Taste erzeugt, nicht aber für die dynamisch generierten Taste.

Sie müssen sich fragen, ob Sie die Event-Handler, wenn die HTML serialisiert generieren wollen. Wenn Sie keine Antwort, htmlSerialize die Funktion für Veranstaltungen durch Tests überprüfen, ob das Attribut beginnt mit den Buchstaben o und n. Aber ist es richtig, nicht auf die Ereignisse serialize? Man kann argumentieren, dass, wenn du gehst in HTML serialisieren, die Sie benötigen, um alles zu serialisieren. Allerdings ist die Serialisierung alles schwierig, da müssen Sie irgendwie Store-Funktion Referenzen. Sie können keine die Implementierung einer Funktion in einem Attribut, da Attribute nicht Zeile enthalten Feeds. Ihre Entscheidung sollte auf das, was Sie wahrscheinlich wollen mit HTML-Serialisierung muss, gestützt werden und dass die staatlichen extrahieren ist. Die vorgeschlagene Lösung ist keineswegs vollständig, aber es löst einen spezifischen Kontext, und das ist, was Sie zu realisieren müssen. Bei der Lösung des Problems der Serialisierung des Funktions-Referenz, stellt sich die Frage, wie die Funktion, die dynamisch zugewiesen hat, wie im Beispiel HTML-Seite dargestellt serialisieren. Zur Veranschaulichung, wollen wir versuchen eine erste Serialisierung von Funktionen, wenn Sie schnell werden die Serialisierung von Funktionen sehen, ist ziemlich kompliziert. Um die Funktionen serialize, würden Sie schreiben die htmlSerialize Funktion wie folgt:

htmlSerialize: function (element) ( var scriptBuffer = "";var Rekursive = function (element) (var buffer = ""; if (element.nodeType == 1) (buffer + = "<" + element.nodeName + ""; var didGenerateValue = false; for (var i = 0; i <element.attributes.length; i + +) (var attr = element.attributes [i]; var name = attr.name.toLowerCase (); if (name.charAt (0) == 'o' & & name.charAt (1) == 'n') ( if (typeof (attr.value) == "string") ( Puffer + = attr.name + "= \" "+ attr.value +" \ ""; ) )else if (attr.value! = null & &! (typeof (attr.value) == "string" & & attr.value.length == 0)) (if (new String (element [attr.name]). toLowerCase ( ) == "undefined") (buffer + = attr.name + "= \" "+ attr.value +" \ "";) else (buffer + = attr.name + "= \" "+ Element [attr. name] + "\" ";)) if (attr.name.toLowerCase () ==" value ") (didGenerateValue = true;)) if (element.nodeName.toLowerCase () ==" input "& &! didGenerateValue) (buffer + = "value = \" "+ element.value +" \ "";) if (element.onclick) ( scriptBuffer + = "var" + + element.id "_onclick =" + element.onclick; buffer + = "value = \" "+ + element.id" _onclick () \ ""; )buffer + = ">" if (element.nodeName.toLowerCase () == "textarea") (buffer + = element.value;) else (for (var i = 0; i <element.childNodes.length; i + +) (buffer + = recursive (element.childNodes [i]);)) buffer + = "  ";) Else if (element.nodeType == 3) (buffer + = element.nodeValue;) return buffer;) var buffer =" "for (var i = 0; i <element.childNodes.length; i + +) (buffer + = recursive (element.childNodes [i]);) return buffer;)

Die fett-Code in der modifizierten Umsetzung bezieht sich auf die Serialisierung der Event-Handler. Das erste Stück der fett-Code ist die Erklärung eines Skripts Puffer. Das Skript Puffer wird die Script-Code gespeichert, die Sie mit dem HTML serialisiert. Sie müssen die beiden Stücke, wie die Script-Code dynamisch wird sich anhängen, wenn Sie ordnen die serialisiert HTML mit der Eigenschaft innerHTML. Die zweite fett-Code ist der Serialisierung der Ereignisse, die Sie zur Design-Zeit erklärt. Wenn das Element dynamisch befestigt ist, dann alle zugehörigen Veranstaltung ist nicht serialisiert. Die letzte und dritte Stück fett-Code ist der Code problematisch und empfindlich. In dem Beispiel HTML-Seite, wurde das Ereignis onClick dynamisch zugeteilt, wo eine Schaltfläche dynamisch injiziert wurde. Onclick Die Veranstaltung war nicht eine Zeichenfolge, auf die verwiesen weiteren Anruf tätigen. Die onclick-Event referenziert eine anonyme JavaScript-Funktion. Da serialisiert Attribute nicht beendet werden kann Funktion Implementierungen enthalten, müssen Sie die Funktion serialize und erstellen Sie eine Referenz auf die Funktion ähnlich der Serialisierung, die Design-Time-HTML-Element-Deklaration. Die dynamisch zugeordnet onclick-Event ist eine anonyme Funktion, und hat daher keine Kennung. Der kühne Code definiert eine Funktion, die eine Verkettung der Element-ID und der onclick-Event ist. Obwohl die dynamische Beispiel hat keine id, mehrere identische onclick Events generiert. Sie können auch Generierung eines zufälligen Kennung und Referenz, die zufällige Kennung im serialisierten HTML.

Der Random-Kennung löst das Problem der Funktion Bezeichner. Aber jetzt gibt es zwei Puffer. Ein Puffer enthält die serialisierten HTML-Code und anderen Puffer enthält das Skript, das Sie brauchen, um so auszuführen, dass die Funktion Äußerungen werden nicht erzeugen Fehler. Wie Sie sehen, wird der Code jetzt zu kompliziert und zu sehr wackeligen. Dies ist, warum ich nicht Serialisieren der Veranstaltungen, wenn es unbedingt notwendig, zu empfehlen. Denken Sie daran, folgende Punkte in Bezug auf den HTML-Serialisierung Artikel:

• HTML-Serialisierung ist mit Details, Ausnahmen behaftet, und wenig Probleme. Zum Beispiel, wenn Serialisierung mit htmlSerialize erzeugt IE Unmengen von Attributen, die Sie nicht definieren. Dies ist im Falle von Kreditausfällen und macht es schwierig, einige HTML-Extrakt. Sie sollten davon ausgehen, dass das Stylesheet verwaltet Standardwerte.

• Bei der Umsetzung von HTML-Serialisierung, kein Vertrauen in allgemeine Lösungen. Trust spezifische Lösungen für die spezifischen Probleme zu lösen, in einem bestimmten Kontext.

• Immobilien, die Sie zuweisen mit der Methode setAttribute sind für beide Browser, wenn Sie die Eigenschaft innerHTML sichtbar.

• Geändert HTML-Inhalte, die Sie aus dem Browser speichern, indem Sie "Speichern unter" ist nicht konsequent in allen Browsern gespeichert.

• Artikel 2 gezeigt, wie man ein JavaScript-Objekt serialisiert, und in diesem Artikel gezeigt, wie DHTML zu serialisieren. Jede Art von Serialisierung ist eine spezielle Serialisierung für einen einzigartigen Zweck. Sie müssen diese Details bewusst sein und die entsprechenden Serialisierung wählen.

Ein Artikel eingereicht von Sonja Lande


Disclaimer:Unsere Website ist nicht verantwortlich für den Inhalt dieses Artikels. Webarticles ist eine kostenlose Informationsquelle.
Wichtig: Dieser Artikel "Serialisieren HTML" durch ein automatisches Software übersetzt wurde. Wir fühlen uns leid für alle Rechtschreibfehler, die möglicherweise aufgetreten sind. Vielen Dank für Ihr Verständnis.


Online: 151 users browsing the articles directory   


  

|