× 目錄 [1]特征 [2]快捷訪問 [3]文檔寫入 前面的話 文檔節點document,隸屬於表示瀏覽器的window對象,它表示網頁頁面,又被稱為根節點。本文將詳細介紹文檔節點document的內容 特征 文檔節點的三個node屬性——nodeType、nodeValue、nodeName分別是 ...
×
目錄
[1]特征 [2]快捷訪問 [3]文檔寫入前面的話
文檔節點document,隸屬於表示瀏覽器的window對象,它表示網頁頁面,又被稱為根節點。本文將詳細介紹文檔節點document的內容
特征
文檔節點的三個node屬性——nodeType、nodeValue、nodeName分別是9、'#document'和null
由於它是根節點,所以其父節點parentNode指向null,ownerDocument也指向null
console.log(document.nodeType);//9 console.log(document.nodeValue);//null console.log(document.nodeName);//'#document' console.log(document.parentNode);//null console.log(document.ownerDocument);//null
快捷訪問
子節點
【1】<html>
document.documentElement屬性始終指向HTML頁面中的<html>元素
console.log(document.documentElement.nodeName);//'HTML'
【2】<body>
document.body屬性指向<body>元素
console.log(document.body.nodeName);//'BODY'
【3】<!DOCTYPE>
document.doctype屬性指向<!DOCTYPE>標簽
[註意]IE8-不識別,輸出null,因為IE8-瀏覽器將其識別為註釋節點
console.log(document.doctype.nodeName);//'html'
【4】<head>
document.head屬性指向文檔的<head>元素
[註意]IE8-瀏覽器下不支持
console.log(document.head.nodeName);//'HEAD'
文檔信息
【1】title
<title>元素顯示在瀏覽器視窗的標題欄或標簽頁上,document.title包含著<title>元素中的文本,這個屬性可讀可寫
console.log(document.title);//Document document.title="test"; console.log(document.title);//test
【2】URL、domain、referrer
URL:頁面的完整地址
domain:domain與URL是相互關聯的,包含頁面的功能變數名稱
referrer:表示鏈接到當前頁面的上一個頁面的URL,在沒有來源頁面的時,可能為空
[註意]上面這些信息都來自請求的HTTP頭部,只不過可以通過這三個屬性在javascript中訪問它而已
console.log(document.URL);//http://www.cnblogs.com/xiaohuochai/ console.log(document.domain);//www.cnblogs.com console.log(document.referrer);//http://home.cnblogs.com/followees/
在這3個屬性中,只有domain是可以設置的。但由於安全方面的限制,也並非可以給domain設罝任何值。如果URL中包含一個子功能變數名稱,例如home.cnblogs.com,那麼就只能將domain設置為"cnblogs.com"。不能將這個屬性設置為URL中不包含的域
document.domain = 'cnblogs.com';//"cnblogs.com" //Uncaught DOMException: Failed to set the 'domain' property on 'Document': 'qq.com' is not a suffix of 'cnblogs.com' document.domain = 'qq.com';
【3】baseURI
document.baseURI返回<base>標簽中的URL,如果沒有設置<base>,則該值與document.URL相同
console.log(document.baseURI);'//http://www.cnblogs.com/xiaohuochai/' <base href="http://www.baidu.com"> <script> console.log(document.baseURI);//'http://www.baidu.com/' </script>
【4】字元集charset
document.charset表示文檔中實際使用的字元集
console.log(document.charset);//'UTF-8'
【5】defaultView
document.defaultView保存著一個指針,指向擁有給定文檔的視窗或框架。IE8-瀏覽器不支持defaultView屬性,但IE中有一個等價的屬性名叫parentWindow。所以要確定文檔的歸屬視窗,其相容寫法為:
var parentWindow = document.defaultView || document.parentWindow;//Window
【6】相容模式compatMode
document.compatMode表示文檔的模式,在標準模式下值為"CSS1Compat",在相容模式下值為"BackCompat"
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script> console.log(document.compatMode)//CSS1Compat </script> </body> </html>
<html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script> console.log(document.compatMode)//BackCompat </script> </body> </html>
【7】文檔模式documentMode
document.documentMode屬性表示當前的文檔模式
[註意]該屬性只有IE11-瀏覽器支持
//IE11返回11,IE10返回10,IE9返回9,IE8返回8,IE7返回7,IE6返回6 console.log(document.documentMode);
【8】時間戳lastModified
document.lastModified屬性返回當前文檔最後修改的時間戳,格式為字元串
console.log(document.lastModified); //09/02/2016 15:36:15
節點集合
【1】anchors
document.anchors包含文檔中所有帶name特性的<a>元素
<a href= "#" name="a1">a1</a> <a href= "#" name="a2">a2</a> <a href= "#" >3</a> <script> console.log(document.anchors.length)//2 </script>
【2】links
document.links包含文檔中所有帶href特性的<a>元素
<a href="#">1</a> <a href="#">2</a> <a>3</a> <script> console.log(document.links.length)//2 </script>
【3】forms
document.forms包含文檔中所有的<form>元素,與document.getElementsByTagName("form")結果相同
<form action="#">1</form> <form action="#">2</form> <script> console.log(document.forms.length)//2 </script>
【4】images
document.images包含文檔中所有的<img>元素,與document.getElementsByTagName('img')結果相同
<img src="#" alt="#"> <img src="#" alt="#"> <script> console.log(document.images.length)//2 </script>
【5】scripts
document.scripts屬性返回當前文檔的所有腳本(即script標簽)
<script> console.log(document.scripts.length)//1 </script>
以上五個屬性返回的都是HTMLCollection對象實例
[註意]關於HTMLCollection等動態集合的詳細信息移步至此
console.log(document.links instanceof HTMLCollection); // true console.log(document.images instanceof HTMLCollection); // true console.log(document.forms instanceof HTMLCollection); // true console.log(document.anchors instanceof HTMLCollection); // true console.log(document.scripts instanceof HTMLCollection); // true
由於HTMLCollection實例可以用HTML元素的id或name屬性引用,因此如果一個元素有id或name屬性,就可以在上面這五個屬性上引用
<form name="myForm"> <script> console.log(document.myForm === document.forms.myForm); // true </script>
文檔寫入方法
將輸出流寫入到網頁的能力有4個方法:write()、writeln()、open()、close()
write()和writeln()
write()和writeln()方法都接收一個字元串參數,即要寫入到輸出流中的文本
write()會原樣寫入,而writeln()則在字元串的末尾添加一個換行符(\n),但換行符會被頁面解析為空格
在頁面被載入的過程中,可以使用這兩個方法向頁面中動態地加入內容
<button id="btn">替換內容</button> <script> btn.onclick = function(){ document.write('123'); document.writeln('abc'); document.write('456'); } </script>
open()和close()
open()和close()方法分別用於打開和關閉網頁的輸出流
open()方法實際上等於清除當前文檔
<button id="btn">清除內容</button> <script> btn.onclick = function(){ document.open(); } </script>
close()方法用於關閉open方法所新建的文檔。一旦關閉,write方法就無法寫入內容了。如果再調用write方法,就等同於又調用open方法,新建一個文檔,再寫入內容。所以,實際上,close()只是和open()方法配套使用而已
<button id="btn">替換內容</button> <script> //相當於'123'又把'1'覆蓋了 btn.onclick = function(){ document.open(); document.write('1'); document.close(); document.write('123'); } </script>
一般地,先使用open()方法用於新建一個文檔,然後使用write()和writeln()方法寫入文檔,最後使用close()方法,停止寫入
<button id="btn">替換內容</button> <script> btn.onclick = function(){ document.open(); document.writeln('hello'); document.write('world'); document.close(); } </script>
[註意]如果是在頁面載入期間使用write()和writeln()方法,則不需要用到這兩個方法
<button id="btn">內容</button> <script> document.writeln('hello'); document.write('world'); </script>
最後
節點類型系列終於完結了
DOM共有12種節點類型。其中,常用的有Element元素節點、Attribute特性節點、Text文本節點、Comment註釋節點、Document文檔節點和DocumentFragment文檔片段節點
歡迎交流