Wie überprüft man, ob ein DOM-Knoten der Knoten ist, der die Doctype-Deklaration darstellt?

8

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

an

DOM-shim erhalten document.doctype in IE8, indem nur document.childNodes[0]

zurückgegeben wird     
Raynos 28.10.2011, 18:31
quelle

2 Antworten

2

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:

%Vor%

Siehe Ссылка

    
Esailija 24.07.2012, 09:50
quelle
0

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.

    
Raynos 30.10.2011 11:58
quelle