天天看點

Java基礎—Document類型的變化

Document類型的變化

Document類型的變化中唯一與命名空間無關的方法是importNode()。這個方法的用途是從一個文檔中取得一個節點,然後将其導入到另一個文檔,使其成為這個文檔結構的一部分。需要注意的是,每個節點都有一個ownerDocument屬性,表示所屬的文檔。

如果調用appendChild()時傳入的節點屬于不同的文檔(ownerDocument屬性的值不一樣),則會導緻錯誤。但在調用importNode()時傳入不同文檔的節點則會傳回一個新節點,這個新節點的所有權歸目前文檔所有。

說起來,importNode()方法與Element的cloneNode()方法非常相似,它接受兩個參數:要複制的節點和一個表示是否複制子節點的布爾值。傳回的結果是原來節點的副本,但能夠在目前文檔中使用。來看下面的例子:

var newNode = document.importNode(oldNode, true); //導入節點及其所有子節點

document.body.appendChild(newNode);

這個方法在HTML文檔中并不常用,在XML文檔中用得比較多。

“DOM2級視圖”子產品添加了一個名為defaultView的屬性,其中儲存着一個指針,指向擁有給定文檔的視窗(或架構)。除此之外,“視圖”規範沒有提供什麼時候其他視圖可用的資訊,因而這是唯一一個新增的屬性。除IE之外的所有浏覽器都支援defaultView屬性。在IE中有一個等價的屬性名叫parentWindow(Opera也支援這個屬性)。是以,要确定文檔的歸屬視窗,可以使用以下代碼。

var parentWindow = document.defaultView || document.parentWindow;

除了上述一個方法和一個屬性之外,“DOM2級核心”還為document.implementation對象規定了兩個新方法:createDocumentType()和createDocument()。前者用于建立一個新的DocumentType節點,接受3個參數:文檔類型名稱、publicId、systemId。例如,下列代碼會建立一個新HTML 4.01 Strict文檔類型。

var doctype = document.implementation.createDocumentType("html",

"-//W3C//DTD HTML 4.01//EN",

"http://www.w3.org/TR/html4/strict.dtd");

由于既有文檔的文檔類型不能改變,是以createDocumentType()隻在建立新文檔時有用;建立新文檔時需要用到createDocument()方法。這個方法接受3個參數:針對文檔中元素的namespaceURI、文檔元素的标簽名、新文檔的文檔類型。下面這行代碼将會建立一個空的新XML文檔。

var doc = document.implementation.createDocument("", "root", null);

這行代碼會建立一個沒有命名空間的新文檔,文檔元素為<root>,而且沒有指定文檔類型。要想建立一個XHTML文檔,可以使用以下代碼。

var doctype = document.implementation.createDocumentType("html",

" -//W3C//DTD XHTML 1.0 Strict//EN",

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd");

var doc = document.implementation.createDocument("http://www.w3.org/1999/xhtml",

"html", doctype);

這樣,就建立了一個帶有适當命名空間和文檔類型的新XHTML文檔。不過,新文檔目前隻有文檔元素<html>,剩下的所有元素都需要繼續添加。

“DOM2級HTML”子產品也為document.implementation新增了一個方法,名叫createHTMLDocument()。這個方法的用途是建立一個完整的HTML文檔,包括<html>、<head>、<title>和<body>元素。這個方法隻接受一個參數,即新建立文檔的标題(放在<title>元素中的字元串),傳回新的HTML文檔,如下所示:

var htmldoc = document.implementation.createHTMLDocument("New Doc");

alert(htmldoc.title); //"New Doc"

alert(typeof htmldoc.body); //"object"

CreateHTMLDocumentExample.htm

通過調用createHTMLDocument()建立的這個文檔,是HTMLDocument類型的執行個體,因而具有該類型的所有屬性和方法,包括title和body屬性。隻有Opera和Safari支援這個方法。

「連結」