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:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
var new_doc = new Document();

gdzie poszczególne człony oznaczają:

Algorytm wywołania konstruktora new Document() nie jest skomplikowany. Dla lepszego zrozumienia tematu prezentuję go w całości:

  1. 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:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
<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#

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
[Constructor]
interface Document : Node {
};

Specyfikacje i inne materiały#

Pasek społecznościowy

SPIS TREŚCI AKTUALNEJ STRONY

Document (H1) new Document() (H2) Opis działania (H3) Składnia Web IDL (H3) Specyfikacje i inne materiały (H3)