Also sagen wir (in IE8), dass wir ein document
haben.
Nun können wir normalerweise annehmen, dass document.childNodes[0]
der Doctype ist. Also
var doctype = document.childNodes[0]
Nun, wie bestätigen wir , anstatt anzunehmen, dass es sich um den Doctyp handelt?
%Vor%Wie soll ich wissen, ob ein gegebener Knoten ein Doctyp ist?
Für diejenigen unter Ihnen, die mit DOM4 nicht vertraut sind, schauen Sie sich DocumentType
DOM-shim erhalten document.doctype
in IE8, indem nur document.childNodes[0]
Ich habe herausgefunden, dass in IE7 und IE8 die Eigenschaft .innerHTML
für Kommentare immer die vollständige "<!--comment here-->"
und für den Doctype-Knoten ""
ist. Auch für leere Kommentare ist .innerHTML
"<!---->"
Also basierend darauf habe ich erstellt:
%Vor%Mit der Testseite:
%Vor% Das Ausführen von Doctype und der Kommentare über isDocType
ergibt:
Siehe Ссылка
IE8 sagt nein. : (
Aber im Ernst, abgesehen von Hacks und Annahmen gibt es keinen sauberen Weg.
Wie in den Kommentaren vorgeschlagen, können Sie davon ausgehen, dass Kommentare keine Docute wie
sind doctype.data.indexOf("<!DOCTYPE html") !== -1 && doctype.data.indexOf(">") !== -1
Oder machen Sie Annahmen über die DOM-Struktur
Ich glaube, dass nur Kommentarknoten (und alles, was vom Parser als Kommentarknoten behandelt wird, z. B. eine XML-Deklaration) dem Doctype
vorangehen können
Sie können also einfach die Kommentarknoten in document.childNodes
durchlaufen, bis Sie eine gefunden haben, die mit der obigen regulären Version übereinstimmt.
Tags und Links html dom internet-explorer-8 doctype