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