Document#
new Document()#
Interfejs Document może być wywoływany w roli konstruktora, dzięki czemu pozwala na bezpośrednie tworzenie nowych pustych dokumentów (wewnętrznie dokumentów XML) wprost z interfejsu.
Opis działania#
Samo wywołanie i poszczególne jego części najlepiej objaśnić na zapisie składniowym:
var new_doc = new Document();
gdzie poszczególne człony oznaczają:
- new_doc - referencja do nowego pustego dokumentu XML.
Algorytm wywołania konstruktora new Document()
nie jest skomplikowany. Dla lepszego zrozumienia tematu prezentuję go w całości:
- Zwróć nowy węzeł typu
Document
, którego pochodzeniem jest pochodzenie w dokumencie skojarzonym z globalnym obiektem.
Istotną sprawą jest to, że konstruktor new Document()
zwraca pusty obiekt typu Document
(wewnętrznie dokument XML), w przeciwieństwie do metody DOMImplementation.createDocument()
, która tworzy obiekt typu XMLDocument
(wewnętrznie też dokument XML) z opcjonalnym elementem dokumentowym oraz deklaracją typu dokumentu, lub metody DOMImplementation.createHTMLDocument()
, która tworzy obiekt typu Document
(wewnętrznie dokument HTML), ale z cechami i podstawową zawartością właściwą dla dokumentów HTML.
Z praktycznego punktu widzenia sposób utworzenia dokumentu determinuje wiele jego poszczególnych cech, ale zachowanie to jest wyjątkowo niespójne i w głównej mierze zależy od danej przeglądarki internetowej (szczegóły).
Obiekt zwracany przez konstruktor new Document()
implementuje interfejs Document, dlatego ma dostęp do wszystkich poleceń z tego interfejsu (oraz z kolejnych interfejsów w łańcuchu dziedziczenia).
Prosty przykład:
<script>
function getInfoDoc(desc, whatDoc){
doc.write(desc + "<br>");
doc.write("Interfejs: " + whatDoc + "<br>");
doc.write("getElementsByTagName('*').length: " + whatDoc.getElementsByTagName('*').length + "<br>");
doc.write("contentType: " + whatDoc.contentType + "<br>");
doc.write("compatMode: " + whatDoc.compatMode + "<br>");
doc.write("doctype: " + whatDoc.doctype + "<br>");
doc.write("documentElement: " + whatDoc.documentElement + "<br>");
doc.write("documentURI: " + whatDoc.documentURI + "<br>");
doc.write("URL: " + whatDoc.URL + "<br>");
doc.write("origin: " + whatDoc.origin + "<br>");
doc.write("characterSet: " + whatDoc.characterSet + "<br>");
doc.write("charset: " + whatDoc.charset + "<br>");
doc.write("inputEncoding: " + whatDoc.inputEncoding + "<br><br>");
}
var doc = document; // domyślny dokument tworzony przez parser HTML
getInfoDoc("Parametry dla domyślnego dokumentu tworzonego przez parser HTML (właściwość document):", doc);
try{
var newDoc = new Document(); // nowy dokument
getInfoDoc("Parametry dla new Document():", newDoc);
}
catch(e){
doc.write("Brak obsługi konstruktora new Document() dlatego zrzucony zostanie błąd:" + "<br>")
doc.write(e + "<br>"); // opis zależny od przeglądarki
doc.write(e.constructor + "<br><br>"); // function TypeError() { [native code] }
}
var newDocXML = doc.implementation.createDocument(null, null, null); // nowy dokument XML
getInfoDoc("Parametry dla createDocument(null, null, null):", newDocXML);
var newDocHTML = doc.implementation.createHTMLDocument(""); // nowy dokument HTML
getInfoDoc("Parametry dla createHTMLDocument(''):", newDocHTML);
</script>
Na chwilę obecną jedynie przeglądarka Firefox pozwala wywoływać interfejs Document w roli konstruktora, dlatego powyższy przykład należy testować właśnie w niej.
Konstruktor new Document()
pojawia się dopiero w specyfikacji DOM4.
Składnia Web IDL#
[Constructor] interface Document : Node { };