So erstellen Sie Dokumentobjekte mit JavaScript
Im Grunde die Frage, wie soll man denn so zu bauen Dokument - Objekt aus einem string der HTML dynamisch in javascript?
InformationsquelleAutor der Frage jayarjo | 2011-11-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es zwei Methoden definiert, die in Spezifikationen,
createDocument
von DOM Core Level 2 undcreateHTMLDocument
von HTML5. Erstere erstellt ein XML-Dokument (einschließlich XHTML), letzteres erstellt ein HTML-Dokument. Beide befinden sich, wie Funktionen, auf dieDOMImplementation
- Schnittstelle.In der Realität, diese Methoden sind relativ jung und erst in den letzten browser-Versionen. Nach http://quirksmode.org und MDNdie folgenden Browser unterstützen
createHTMLDocument
:Interessant genug, können Sie (Art von) erstellen Sie ein HTML-Dokument bei älteren Versionen von Internet Explorer, mit
ActiveXObject
:Das resultierende Objekt wird ein neues Dokument, die bearbeitet werden können wie jedes andere Dokument.
InformationsquelleAutor der Antwort Andy E
Angenommen, Sie versuchen, erstellen Sie eine vollständig Analysierte Dokument-Objekt aus einem string von markup und content-Typ Sie auch geschehen, zu wissen, (vielleicht, weil Sie haben den html-von ein xmlhttprequest-Objekt, und so bekam der content-type-in seiner
Content-Type
http-header; wahrscheinlich in der Regeltext/html
) – es sollte so einfach sein:in einer idealen Welt der Zukunft, wo browser
DOMParser
- Implementierungen sind so stark und kompetent wie Ihre Dokument-rendering – vielleicht ist das eine gute pipe dream Voraussetzung für die ZukunftHTML6
standards Bemühungen. Es stellt sich heraus keine aktuellen Browsern nicht, obwohl.Haben Sie wahrscheinlich die einfachere (aber immer noch chaotisch) problem, dass Sie einen html-string an, du möchtest eine vollständig Analysierte
Document
Objekt. Hier ist ein anderes nehmen auf, wie Sie das tun, das sollt auch funktionieren in allen Browsern – Sie machen eine HTML -Document
Objekt:dann füllen Sie es mit Ihrem html-fragment:
Jetzt haben Sie eine vollständig geparst DOM in doc, die Sie ausführen können
alert(doc.title)
auf, in Scheiben schneiden, mit css-Selektoren wiedoc.querySelectorAll('p')
oder dito XPath mitdoc.evaluate
.Diese tatsächlich funktioniert in modernen WebKit Browsern wie Chrome und Safari (ich habe gerade getestet in Chrome 22 und Safari 6) – hier ist ein Beispiel, das die aktuelle Seite der source-code lässt es in einem neuen Dokument variable
src
liest aus seinem Titel, überschreibt es mit einem html-zitiert version des gleichen source-code aus und zeigt das Ergebnis in einem iframe: http://codepen.io/johan/full/KLIeELeider, ich glaube nicht, dass alle anderen modernen Browser ganz so solide Implementierungen noch.
InformationsquelleAutor der Antwort ecmanaut
Pro spec (doc), kann man mit der
createHTMLDocument
Methode derDOMImplementation
erreichbar überdocument.implementation
wie folgt:DOMImplementation
: https://developer.mozilla.org/en/DOM/document.implementationDOMImplementation.createHTMLDocument
: https://developer.mozilla.org/En/DOM/DOMImplementation.createHTMLDocumentInformationsquelleAutor der Antwort Chris Baker
Eine aktualisierte Antwort für das Jahr 2014, als die DOMparser entwickelt hat. Dies funktioniert in allen aktuellen Browsern, die ich finden kann, und sollten auch funktionieren in früheren Versionen des IE, mit ecManaut Dokument.Umsetzung.createHTMLDocument (") - Ansatz vor.
Im wesentlichen, IE, Opera, Firefox kann alle analysieren als "text/html". Safari analysiert, wie "text/xml".
Hüten Sie sich vor der Intoleranz XML-parsing, obwohl. Die Safari analysieren brechen bei non-breaking-spaces und andere HTML-Zeichen (Deutsche Umlaute) bezeichnet ein kaufmännisches und. Eher als der Griff jedes Zeichen getrennt, der folgenden code ersetzt alle kaufmännische und-Zeichen mit sinnlosen Buchstabenkombination "j!J!". Dieser string kann anschließend neu gerendert, wie ein kaufmännisches und-Zeichen bei der Anzeige der Ergebnisse in einem browser (einfacher, habe ich festgestellt, als zu versuchen, zu behandeln, kaufmännische und-Zeichen in "false" XML-parsing).
InformationsquelleAutor der Antwort Neil F
Folgende funktioniert in den meisten gängigen Browsern, aber nicht einige. Dies ist, wie einfach es sollte (muss aber nicht):
Konto für user-agent Launen, die folgenden kann besser werden (bitte beachten Sie, attribution):
Sich nicht abschrecken von der Menge an code, es gibt eine Menge Kommentare, es kann verkürzt werden, einiges wird aber weniger lesbar.
Oh, und wenn Sie den markup-Code ist gültiges XML, das Leben ist viel einfacher:
InformationsquelleAutor der Antwort RobG