JavaScript通過Document類型表示文檔。在瀏覽器中,docLunent對(duì)象是HTMLDocument(繼承自Document類型)的一個(gè)實(shí)例,表示整個(gè)HTML頁(yè)面。而且,document對(duì)象是window對(duì)象的一個(gè)屬性,因此可以將其作為全局對(duì)象來(lái)訪問。Document節(jié)點(diǎn)具有下列特征:
⊙nodeType的值為9;
⊙nodeName的值為"#document";
⊙nodeValue的值為null;
⊙parentNode的值為null;
⊙其子節(jié)點(diǎn)可能是一個(gè)DocumentType(最多一個(gè))、Element(最多一個(gè))、ProcessingInstruction或Comment,
Document類型可以表示HTML頁(yè)面或者其他基于XML的文檔。不過,最常見的應(yīng)用還是作為HTMLDocument實(shí)例的document對(duì)象。通過這個(gè)文檔對(duì)象,不僅可以取得與頁(yè)面有關(guān)的信息,而且還能操作頁(yè)面的外觀及其底層結(jié)構(gòu)。
南昌網(wǎng)站設(shè)計(jì)公司技術(shù)員提醒大家,除了IE之外,可以在任何瀏覽器中通過腳本訪問Document類型的構(gòu)造函數(shù)和原型.但在所有瀏覽器中都可以訪問HTMLDocument類型的構(gòu)造函數(shù)和原型,包括IE8及后續(xù)版本.
文檔的子節(jié)點(diǎn)
雖然DOM標(biāo)準(zhǔn)規(guī)定Document節(jié)點(diǎn)的子節(jié)點(diǎn)可以是DocumentType、Element、Processinglnstruction或conrrnent,但還有兩個(gè)內(nèi)置的訪問其子節(jié)點(diǎn)的快捷方式。第一個(gè)就是documentElement屬性,該屬性始終指向HTML頁(yè)面中的元素。另一個(gè)就是通過childNodes列表訪問文檔元素,但通過documentElement屬性則能更快捷、更直接地訪問該元素。以下面這個(gè)簡(jiǎn)單的頁(yè)面為例:
(/body>
這個(gè)頁(yè)面在經(jīng)過瀏覽器解析后,其文檔中只包含一個(gè)子節(jié)點(diǎn),即元素??梢酝ㄟ^documentElement或childNodes列表來(lái)訪問這個(gè)元素,如下所示:
var html=document.documentElement; //取得對(duì)的引用
alert (html===document. childNodes[O]); //true
alert (html===document. firstChild); //true這個(gè)例子說明,documentElement、firstChild和childNodes[o]的1直相同,都指向元素。
作為HTMLDocument的實(shí)例,document對(duì)象還有一個(gè)body屬性,直接指向元素。因?yàn)殚_發(fā)人員經(jīng)常要使用這個(gè)元素,所以document.body在JavaScript代碼中出現(xiàn)的頻率非常高,其用法如下:
var body=docurnent.body; //取得對(duì)的引用
所有瀏覽器都支持document.documentElement和document.bodY屬性。
Document另一個(gè)可能的子節(jié)點(diǎn)是DocumentType。通常將標(biāo)簽看成一個(gè)與文檔其他部分不同的實(shí)體,可以通過doctype屬性(在瀏覽器中是document.doc type)來(lái)訪問它的信息:
var doctype=document .doctype; //取得對(duì)的引用瀏覽器對(duì)docuInent.doc type的支持差別很大,可以給出如下總結(jié)①。
⊙IE:如果存在文檔類型聲明,會(huì)將其錯(cuò)誤地解釋為一個(gè)注釋并把它當(dāng)作Cornment節(jié)點(diǎn);而
document.doctype的值始終為null。
⊙Firefox:如果存在文檔類型聲明,則將其作為文檔的第一個(gè)子節(jié)點(diǎn);document.doctype是一個(gè)DocumentType節(jié)點(diǎn),也可以通過document,firstChild或document.childNodes[0]訪 問同一個(gè)節(jié)點(diǎn)。
⊙Safari. Chrome和Opera:如果存在文檔類型聲明,則將其解析,但不作為文檔的子節(jié)點(diǎn)。document.doctype是一個(gè)DocumentType節(jié)點(diǎn),但該節(jié)點(diǎn)不會(huì)出現(xiàn)在doclunent.childNodes中。
由于瀏覽器對(duì)document.doctype的支持不一致,因此這個(gè)屬性的用處很有限。從技術(shù)上說,出現(xiàn)在元素外部的注釋應(yīng)該算是文檔的子節(jié)點(diǎn)。然而,不同的瀏覽器在是否解析這些注釋以及能否正確處理它們等方面,也存在很大差異。以下面簡(jiǎn)單的HTML頁(yè)面為例:
看起來(lái)這個(gè)頁(yè)面應(yīng)該有3個(gè)子節(jié)點(diǎn):注釋、元素、注釋。從邏輯上講,我們會(huì)認(rèn)為document.childNodes中應(yīng)該包含與這3個(gè)節(jié)點(diǎn)對(duì)應(yīng)的3項(xiàng)。但是,現(xiàn)實(shí)中的瀏覽器在處理位于外部的注釋方面存在如下差異。
⊙IE、Safari 3.1及更高版本、Opera和Chrome只為第一條注釋創(chuàng)建節(jié)點(diǎn),不為第二條注釋創(chuàng)建節(jié)點(diǎn)。結(jié)果,第一條注釋就會(huì)成為document.childNodes中的第一個(gè)子節(jié)點(diǎn)。
⊙Firefox以及Safari 3.1之前的版本會(huì)完全忽略這兩條注釋。
同樣,瀏覽器間的這種不一致性也導(dǎo)致了位于元素外部的注釋沒有什么用處。
多數(shù)情況下,我們都用不著在document對(duì)象上調(diào)用appendChild()、removeChild()和replaceChild()方法,因?yàn)槲臋n類型(如果存在的話)是只讀的,而且它只能有一個(gè)元素子節(jié)點(diǎn)(該節(jié)點(diǎn)通常早就已經(jīng)存在了)。
本文僅限內(nèi)部技術(shù)人員學(xué)習(xí)交流,不得作于其他商業(yè)用途.原創(chuàng)文章出自:南昌網(wǎng)站建設(shè)公司-百恒網(wǎng)絡(luò) http://www.gimmickmag.com 如轉(zhuǎn)載請(qǐng)注明出處!