一膛堤、概述
document
節(jié)點是整個文檔樹的頂層節(jié)點漓拾,每張網(wǎng)頁都有自己的document
節(jié)點。
window.document
屬性就指向這個節(jié)點虑润。只要瀏覽器開始載入HTML文檔成玫,這個節(jié)點對象就存在了,可以直接調(diào)用。
document
節(jié)點有不同的辦法可以獲取哭当。
- 對于正常的網(wǎng)頁猪腕,直接使用
document
或window.document
- 對于
iframe
載入的網(wǎng)頁,使用iframe
節(jié)點的contentDocument
屬性钦勘。 - 對于Ajax操作返回的文檔陋葡,使用
XMLHttpRequest
對象的responseXML
屬性。 - 對于已知包含某個節(jié)點的文檔彻采,使用該節(jié)點的
ownerDocument
屬性腐缤。
上面得到的四種document
節(jié)點,都部署了Document
接口肛响,因此有共同的屬性和方法岭粤。當然,各自也有一些自己獨特的屬性和方法特笋,比如HTML和XML文檔的document
節(jié)點就不一樣剃浇。
二、指向文檔內(nèi)部節(jié)點的屬性
document
節(jié)點有很多屬性猎物,其中相當一部分屬于快捷方式虎囚,指向文檔內(nèi)部的某個節(jié)點。
2.1霸奕、document.doctype溜宽、document.documentElement、document.defaultView
對于HTML文檔來說质帅,document
對象一般有兩個子節(jié)點适揉。第一個子節(jié)點是document.doctype
,它是一個對象煤惩,包含了當前文檔類型(Document Type Declaration嫉嘀,簡寫DTD)信息。對于HTML5文檔魄揉,該節(jié)點就代表<!DOCTYPE html>
剪侮。如果網(wǎng)頁沒有聲明DTD,該屬性返回null
洛退。
var doctype = document.doctype;
doctype //<!DOCTYPE html>
doctype.name //"html"
document.firstChild
通常就返回這個節(jié)點瓣俯。
document.documentElement
屬性返回當前文檔的根節(jié)點(root)。它通常是document
節(jié)點的第二個子節(jié)點兵怯,緊跟在document.doctype
節(jié)點后面彩匕。對于HTML網(wǎng)頁,該屬性返回<html>
節(jié)點媒区。
document.defaultView
屬性驼仪,在瀏覽器中返回document
對象所在的window
對象掸犬,否則返回null
。
document.defaultView === window // true
2.2绪爸、document.body湾碎、document.head
document.head
屬性返回當前文檔的<head>
節(jié)點,document.body
屬性返回當前文檔的<body>
節(jié)點奠货。
document.head === document.querySelector('head') //true
document.body === document.querySelector('body') //true
這兩個屬性總是存在的介褥,如果網(wǎng)頁源碼里面省略了<head>
或<body>
,瀏覽器會自動創(chuàng)造仇味。另外呻顽,這兩個屬性是可寫的,如果對其寫入一個新的節(jié)點丹墨,會導致原有的所有子節(jié)點被移除廊遍。
2.3、document.activeElement
document.activeElement
屬性返回當前文檔中獲得焦點的那個元素贩挣。用戶通澈砬埃可以使用Tab鍵移動焦點,使用空格鍵激活焦點王财。比如卵迂,如果焦點在一個鏈接上,此時按下一個空格鍵绒净,就會跳轉(zhuǎn)到該鏈接见咒。
三、返回特定節(jié)點集合的屬性
以下屬性返回文檔內(nèi)部特定元素的集合挂疆,都是類似數(shù)組的對象改览。這些集合都是動態(tài)的,原節(jié)點有任何變化缤言,立刻會反映在集合中宝当。
3.1、document.links胆萧、document.forms庆揩、document.images、document.embeds
document.links
屬性返回當前文檔所有設定了href
屬性的a
及area
元素跌穗。
document.forms
屬性返回頁面中所有表單元素的form
订晌。
var selectForm = document.forms[0];
上面代碼獲取文檔第一個表單。
document.images
屬性返回頁面所有圖片元素(即img
標簽)蚌吸。
var imglist = document.images;
for(var i=0;i<imglist.length;i++){
if(imglist[i].src === 'banner.gif'){
//...
}
}
上面代碼在所有img標簽中锈拨,尋找特定圖片。
document.embeds
屬性返回網(wǎng)頁中所有嵌入對象套利,即embed
標簽推励。
以上四個屬性返回的都是HTMLCollection
對象實例。
由于HTMLCollection
對象的實例可以用HTML元素的id或name屬性引用肉迫,因此如果一個元素有id或name屬性验辞,就可以在上面這四個屬性上引用。
//HTML代碼
<form name="myForm">
//JS
document.myForm === document.forms.myForm //true
3.2喊衫、document.scripts跌造、document.styleSheets
document.scripts
屬性返回當前文檔的所有腳本(即script
標簽)。
var scripts = document.scripts;
if(scripts.length !== 0){
console.log('當前網(wǎng)頁有腳本');
}
document.scripts
屬性返回的也是HTMLCollection
對象的實例族购。
因此壳贪,如果一個script
標簽有id
或name
屬性,就可以在document.scripts
上引用寝杖。
document.styleSheets
屬性返回一個類似數(shù)組的對象违施,代表當前網(wǎng)頁的所有樣式表。每個樣式表對象都有cssRules
屬性瑟幕,返回該樣式表的所有CSS規(guī)則磕蒲,這樣就可以操作具體的CSS規(guī)則了。
四只盹、返回文檔信息的屬性
以下屬性返回文檔信息辣往。
4.1、document.documentURI殖卑,document.URL
document.documentURI
屬性和document.URL
屬性都返回一個字符串站削,表示當前文檔的網(wǎng)址。不同之處是documentURI
屬性是所有文檔都具備的孵稽,URL
屬性則是HTML文檔獨有的许起。
document.documentURI === document.URL
// true
另外,如果文檔的錨點(#anchor
)變化肛冶,這兩個屬性都不會跟著變化街氢,它們的值是靜態(tài)的。但是睦袖,document.location
會跟著變化珊肃,document.location
總是返回最新的URL
,會跟蹤錨點的變化馅笙。
4.2伦乔、document.domain
document.domain
屬性返回當前文檔的域名。比如董习,某張網(wǎng)頁的網(wǎng)址是 http://www.example.com/hello.html 烈和,domain屬性就等于www.example.com。如果無法獲取域名皿淋,該屬性返回null
招刹。
var badDomain = 'www.example.xxx';
if (document.domain === badDomain)
window.close();
上面代碼判斷恬试,如果當前域名等于指定域名,則關(guān)閉窗口疯暑。
二級域名的情況下训柴,domain屬性可以設置為對應的一級域名。比如妇拯,當前域名是sub.example.com幻馁,則domain屬性可以設置為example.com。除此之外的寫入越锈,都是不可以的仗嗦。
4.3、document.lastModified
document.lastModified
屬性返回當前文檔最后修改的時間戳甘凭,格式為字符串稀拐。
document.lastModified
// Tuesday, July 10, 2001 10:19:42
注意,lastModified
屬性的值是是字符串对蒲,所以不能用來直接比較钩蚊,兩個文檔誰的日期更新,需要用Date.parse
方法轉(zhuǎn)成時間戳格式蹈矮,才能進行比較砰逻。
4.4、document.location
document.location屬性返回location對象泛鸟,提供了當前文檔的URL信息蝠咆。
// 當前網(wǎng)址為 http://user:passwd@www.example.com:4097/path/a.html?x=111#part1
document.location.href // "http://user:passwd@www.example.com:4097/path/a.html?x=111#part1"
document.location.protocol // "http:"
document.location.host // "www.example.com:4097"
document.location.hostname // "www.example.com"
document.location.port // "4097"
document.location.pathname // "/path/a.html"
document.location.search // "?x=111"
document.location.hash // "#part1"
document.location.user // "user"
document.location.password // "passed"
location對象有以下方法。
location.assign()
location.reload()
location.toString()
// 跳轉(zhuǎn)到另一個網(wǎng)址
document.location.assign('http://www.google.com')
// 優(yōu)先從服務器重新加載
document.location.reload(true)
// 優(yōu)先從本地緩存重新加載(默認值)
document.location.reload(false)
// 跳轉(zhuǎn)到新網(wǎng)址北滥,并將取代掉history對象中的當前記錄
document.location.replace('http://www.google.com');
// 將location對象轉(zhuǎn)為字符串刚操,等價于document.location.href
document.location.toString()
如果將新的網(wǎng)址賦值給location對象,網(wǎng)頁就會自動跳轉(zhuǎn)到新網(wǎng)址再芋。
document.location = 'http://www.example.com';
// 等同于
document.location.;
也可以指定相對URL菊霜。
document.location = 'page2.html';
如果指定的是錨點,瀏覽器會自動滾動到錨點處济赎。
document.location = '#top';
注意鉴逞,采用上面的方法重置URL,跟用戶點擊鏈接跳轉(zhuǎn)的效果是一樣的司训。上一個網(wǎng)頁依然將保存在瀏覽器歷史之中构捡,點擊“后退”按鈕就可以回到前一個網(wǎng)頁。
如果不希望用戶看到前一個網(wǎng)頁壳猜,可以使用location.replace
方法勾徽,瀏覽器history對象就會用新的網(wǎng)址,取代當前網(wǎng)址统扳,這樣的話喘帚,“后退”按鈕就不會回到當前網(wǎng)頁了畅姊。它的一個應用就是,當腳本發(fā)現(xiàn)當前是移動設備時吹由,就立刻跳轉(zhuǎn)到移動版網(wǎng)頁涡匀。
document.location
屬性與window.location
屬性等價。
document.location === window.location // true
歷史上溉知,IE曾經(jīng)不允許對document.location
賦值,為了保險起見腕够,建議優(yōu)先使用window.location
级乍。如果只是單純地獲取當前網(wǎng)址,建議使用document.URL
帚湘,語義性更好玫荣。
4.5、document.referrer大诸、document.title捅厂、document.characterSet
document.referrer
屬性返回一個字符串,表示當前文檔的訪問來源资柔,如果是無法獲取來源或是用戶直接鍵入網(wǎng)址焙贷,而不是從其他網(wǎng)頁點擊,則返回一個空字符串贿堰。
document.referrer
的值辙芍,總是與HTTP頭信息的Referer
保持一致,但是它的拼寫有兩個r羹与。
document.title
屬性返回當前文檔的標題故硅,該屬性是可寫的。
document.title = '新標題';
document.characterSet
屬性返回渲染當前文檔的字符集纵搁,比如UTF-8吃衅、ISO-8859-1
。
4.6腾誉、document.readyState
document.readyState
屬性返回當前文檔的狀態(tài)徘层,共有三種可能的值。
loading:加載HTML代碼階段(尚未完成解析)
interactive:加載外部資源階段時
complete:加載完成時
這個屬性變化過程如下妄辩。
1惑灵、瀏覽器開始解析HTML文檔,document.readyState屬性等于loading眼耀。
2英支、瀏覽器遇到HTML文檔中的<script>元素,并且沒有async和defer屬性哮伟,就暫停解析干花,開始執(zhí)行腳本妄帘,這時document.readyState屬性還是loading。
3池凄、HTML文檔解析完成电媳,document.readyState屬性變成interactive独榴。
4、瀏覽器等待圖片、樣式表衰齐、字體文件等外部資源加載完成,一旦全部加載完成猿涨,document.readyState屬性變成complete蛔外。
4.7、document.designMode
document.designMode
屬性控制當前文檔是否可編輯伟端,通常用在制作所見即所得編輯器杯道。打開iframe
元素包含的文檔的designMode
屬性,就能將其變?yōu)橐粋€所見即所得的編輯器责蝠。
4.8党巾、document.implementation
document.implementation
屬性返回一個對象,用來甄別當前環(huán)境部署了哪些DOM相關(guān)接口霜医。implementation
屬性的hasFeature
方法齿拂,可以判斷當前環(huán)境是否部署了特定版本的特定接口。
document.implementation.hasFeature('HTML', '2.0')
// true
document.implementation.hasFeature('MutationEvents','2.0')
// true
上面代碼表示肴敛,當前環(huán)境部署了DOM HTML 2.0版和MutationEvents的2.0版创肥。
4.9、document.compatMode
document.compatMode
屬性返回瀏覽器處理文檔的模式值朋,可能的值為BackCompat
向后兼容模式和CSS1Compat
(嚴格模式)叹侄。
一般來說,如果網(wǎng)頁代碼的第一行設置了明確的DOCTYPE
(比如<!DOCTYPE html>)昨登,document.compatMode
的值都為CSS1Compat
趾代。
4.10、document.cookie
document.cookie
屬性用來操作瀏覽器Cookie丰辣。
五撒强、讀寫相關(guān)的方法
5.1、document.open()笙什,document.close()
document.open
方法用于新建一個文檔飘哨,供write方法寫入內(nèi)容。它實際上等于清除當前文檔琐凭,重新寫入內(nèi)容芽隆。不要將此方法與window.open()
混淆,后者用來打開一個新窗口,與當前文檔無關(guān)胚吁。
document.close方法用于關(guān)閉open方法所新建的文檔牙躺。一旦關(guān)閉,write方法就無法寫入內(nèi)容了腕扶。如果再調(diào)用write方法孽拷,就等同于又調(diào)用open方法,新建一個文檔半抱,再寫入內(nèi)容脓恕。
5.2、document.write()窿侈,document.writeIn()
document.write方法用于向當前文檔寫入內(nèi)容进肯。只要當前文檔還沒有用close方法關(guān)閉,它所寫入的內(nèi)容就會追加在已有內(nèi)容的后面棉磨。
// 頁面顯示“helloworld”
document.open();
document.write('hello');
document.write('world');
document.close();
注意,document.write
會當作HTML代碼解析学辱,不會轉(zhuǎn)義乘瓤。
document.write('<p>hello world</p>');
如果頁面已經(jīng)解析完成(DOMContentLoaded事件發(fā)生之后),再調(diào)用write方法策泣,它會先調(diào)用open方法衙傀,擦除當前文檔所有內(nèi)容,然后再寫入萨咕。
document.addEventListener('DOMContentLoaded', function (event) {
document.write('<p>Hello World!</p>');
});
// 等同于
document.addEventListener('DOMContentLoaded', function (event) {
document.open();
document.write('<p>Hello World!</p>');
document.close();
});
如果在頁面渲染過程中調(diào)用write方法统抬,并不會調(diào)用open方法。(可以理解成危队,open方法已調(diào)用聪建,但是close方法還未調(diào)用。)
<html>
<body>
hello
<script type="text/javascript">
document.write("world")
</script>
</body>
</html>
在瀏覽器打開上面網(wǎng)頁茫陆,將會顯示hello world金麸。
document.write
是JS語言標準化之前就存在的方法,現(xiàn)在完全有更符合標準的方法向文檔寫入內(nèi)容(比如對innerHTML
屬性賦值)簿盅。所以挥下,除了某些特殊情況,應該盡量避免使用document.write
這個方法桨醋。
document.writeIn
方法與write
方法完全一致棚瘟,除了會在輸出內(nèi)容的尾部添加換行符。
document.write(1);
document.write(2);
// 12
document.writeln(1);
document.writeln(2);
// 1
// 2
//
注意喜最,writeIn
方法添加的是ASCII碼換行符偎蘸,渲染成HTML網(wǎng)頁時不起作用,即在網(wǎng)頁上顯示不出換行。
六禀苦、查找節(jié)點的方法
以下方法用來查找某個節(jié)點
6.1蔓肯、document.querySelector(),document.querySelectorAll()
document.querySelector
方法接受一個CSS選擇器作為參數(shù)振乏,返回匹配該選擇器的元素節(jié)點蔗包。如果有多個節(jié)點滿足匹配條件,則返回第一個匹配的節(jié)點慧邮。如果沒有發(fā)現(xiàn)匹配的節(jié)點调限,則返回null
。
var el1 = document.querySelector('.myclass');
var el1 = document.querySelector('#myclass > [ng-click]');
document.querySelectorAll
方法與querySelector
用法類似误澳,區(qū)別是返回一個NodeList
對象耻矮,包含所有匹配給定選擇器的節(jié)點。
elementList = document.querySelectorAll('.myclass');
這兩個方法的參數(shù)忆谓,可以是逗號分隔的多個CSS選擇器裆装,返回能夠匹配其中的選擇器的所有元素節(jié)點。
var matches = document.querySelectorAll('div.note, div.alert');
上面代碼返回一個文檔中所有的class為"note"或者 "alert"的div元素倡缠。
這兩個方法都支持復雜的CSS選擇器哨免,但是,它們不支持CSS偽元素的選擇器和偽類的選擇器昙沦,即無法選中偽元素和偽類琢唾。
如果querySelectorAll
方法的參數(shù)是字符串*
,則會返回文檔中的所有HTML元素節(jié)點盾饮。另外采桃,querySelectorAll
的返回結(jié)果不是動態(tài)集合,不會實時反映元素節(jié)點的變化丘损。
最后普办,這兩個方法除了定義在document
對象上,還定義在元素節(jié)點上徘钥,即在元素節(jié)點上也可以調(diào)用泌豆。
6.2、document.getElementsByTagName()
document.getElementsByTagName
方法返回所有指定HTML標簽的元素吏饿,返回值是一個類似數(shù)組的HTMLCollection
對象踪危,可以實時反映HTML文檔的變化。如果沒有任何匹配的元素猪落,就返回一個空集贞远。
var paras = document.getElementsByTagName('p');
paras instanceof HTMLCollection //true
上面代碼返回當前文檔的所有p
元素節(jié)點。
HTML標簽名是大小寫不敏感的笨忌,因此getElementsByTagName
方法也是大小寫不敏感的蓝仲。另外,返回結(jié)果中,各個成員的順序就是它們在文檔中出現(xiàn)的順序袱结。
如果傳入字符串*
亮隙,就可以返回文檔中所有HTML元素。
var allElements = document.getElementsByTagName('*');
注意垢夹,HTML元素本身也定義了getElementsByTagName
方法溢吻,返回該元素的后代元素中符合指定標簽的元素。也就是說果元,這個方法不僅可以在document
對象上調(diào)用促王,也可以在任何元素節(jié)點上調(diào)用。
var firstPara = document.getElementsByTagName('p')[0];
var spans = firstPara.getElementsByTagName('span');
上面代碼選中第一個p
元素內(nèi)部的所有span
元素而晒。
6.3蝇狼、document.getElementsByClassName()
document.getElementsByClassName
方法返回一個類似數(shù)組的對象(HTMLCollection
實例對象),包括了所有class名字符合指定條件的元素倡怎,元素的變化實時反映在返回結(jié)果中迅耘。
var elements = document.getElementsByClassName(names);
由于class
是保留字,所以JS一律使用className
表示CSS的class
监署。
如果參數(shù)是一個空格分隔的字符串颤专,元素的class必須符合所有字符串之中所有的class才會返回。
var elements = document.getElementsByClassName('foo bar');
上面代碼返回同時具有foo
和bar
兩個class的元素焦匈,foo
和bar
的順序不重要。
注意昵仅,正常模式下缓熟,CSS的class是大小寫敏感的。
與getElementsByTagName
方法一樣摔笤,getElementsByClassName
方法不僅可以在document
對象上調(diào)用够滑,也可以在任何元素節(jié)點上調(diào)用。
6.4吕世、document.getElementsByName()
document.getElementsByName
方法用于選擇擁有name
屬性的HTML元素(比如<form>彰触、<radio>、<img>
等)命辖,返回一個類似數(shù)組的對象(NodeList
對象的實例)况毅,因為name
屬性相同的元素可能不止一個。
// 表單為 <form name="x"></form>
var forms = document.getElementsByName('x');
forms[0].tagName // "FORM"
6.5尔艇、document.getElementById()
document.getElementById
方法返回匹配指定id
屬性的元素節(jié)點尔许。如果沒有發(fā)現(xiàn)匹配的節(jié)點,返回null
终娃。
var elem = document.getElementById('para1');
注意:該方法的參數(shù)是大小寫敏感的味廊。比如,如果某個節(jié)點的id
屬性是main
,那么document.getElementById('Main')
將返回null
余佛,而不是那個節(jié)點柠新。
document.getElementById
與document.querySelector
方法都能獲取元素節(jié)點,不同之處是document.querySelector
方法的參數(shù)使用CSS選擇器語法辉巡,document.getElementById
方法的參數(shù)是HTML標簽元素的id
屬性恨憎。
document.getElementById('myElement')
document.querySelector('#myElement')
上面代碼中,兩個方法都能選中id
為myElement
的元素红氯,但是getElementById()
比querySelector()
效率高很多框咙。
另外,這個方法只能在document
對象上使用痢甘,不能在其他元素節(jié)點上使用喇嘱。
6.6、document.elementFromPoint()
document.elementFromPoint
方法返回位于頁面指定位置最上層的Element
子節(jié)點塞栅。
var element = document.elementFromPoint(50, 50);
上面代碼選中在(50, 50)這個坐標位置的最上層的那個HTML元素者铜。
elementFromPoint
方法的兩個參數(shù),依次是相對于當前視口左上角的橫坐標和縱坐標放椰,單位是像素作烟。如果位于該位置的HTML元素不可返回(比如文本框的滾動條),則返回它的父元素(比如文本框)砾医。如果坐標值無意義(比如負值或超過視口大心昧谩),則返回null
如蚜。
七压恒、生成節(jié)點的方法
以下方法用于生成元素節(jié)點。
7.1错邦、document.createElement()
document.createElement
方法用來生成HTML元素節(jié)點探赫。
var newDiv = document.createElement('div');
createElement
方法的參數(shù)為元素的標簽名,即元素節(jié)點的tagName
屬性撬呢,對HTML文檔大小寫不敏感伦吠。如果參數(shù)帶有尖括號或是null
,會報錯魂拦。
document.createElement('<div>')
// DOMException: The tag name provided ('<div>') is not a valid name
7.2毛仪、document.createTextNode()
document.createTextNode
方法用來生成文本節(jié)點,參數(shù)為所要生成的文本節(jié)點的內(nèi)容芯勘。
var newDiv = document.createElement('div');
var newContent = document.createTextNode('Hello');
newDiv.appendChild(newContent);
上面代碼新建一個div
節(jié)點和一個文本節(jié)點潭千,然后將文本節(jié)點插入div
節(jié)點。
這個方法可以確保返回的節(jié)點借尿,被瀏覽器當作文本渲染刨晴,而不是當作HTML代碼渲染屉来。因此,可以用來展示用戶的輸入狈癞,避免XSS攻擊茄靠。
var div = document.createElement('div');
div.appendChild(document.createTextNode('<span>Foo & bar</span>'));
console.log(div.innerHTML)
// <span>Foo & bar</span>
上面代碼中,createTextNode
方法對大于號和小于號進行轉(zhuǎn)義蝶桶,從而保證即使用戶輸入的內(nèi)容包含惡意代碼慨绳,也能正確顯示。
需要注意的是真竖,該方法不對單引號和雙引號轉(zhuǎn)義脐雪,所以不能用來對HTML屬性賦值。
7.3恢共、document.createAttribute()
document.createAttribute
方法生成一個新的屬性對象節(jié)點战秋,并返回它。
var attribute = document.createAttribute(name);
createAttribute
方法的參數(shù)name讨韭,是屬性的名稱脂信。
var node = document.getElementById('div1');
var a = document.createAttribute('my_attrib');
a.value = 'newVal';
node.setAttributeNode(a);
//等同于
var node = document.getElementById('div1');
node.setAttribute('my_attrib', 'newVal');
7.4、document.createDocumentFragment()
document.createDocumentFragment
方法生成一個DocumentFragment
對象透硝。
var docFragment = document.createDocumentFragment();
DocumentFragment
對象是一個存在于內(nèi)存的DOM片段狰闪,但是不屬于當前文檔,常常用來生成較復雜的DOM結(jié)構(gòu)濒生,然后插入當前文檔埋泵。這樣做的好處在于,因為DocumentFragment
不屬于當前文檔罪治,對它的任何改動丽声,都不會引發(fā)網(wǎng)頁的重新渲染,比直接修改當前文檔的DOM有更好的性能表現(xiàn)规阀。
var docfrag = document.createDocumentFragment();
[1, 2, 3, 4].forEach(function(e){
var li = document.createElement('li');
li.textContent = e;
docfrag.appendChild(li);
});
document.body.appendChild(docfrag);
八恒序、事件相關(guān)的方法
8.1瘦麸、document.createEvent()
document.createEvent
方法生成一個事件對象谁撼,該對象可以被element.dispatchEvent
方法使用,觸發(fā)指定事件滋饲。
var event = document.createEvent(type);
createEvent
方法的參數(shù)是事件類型厉碟,比如UIEvents、MouseEvents屠缭、MutationEvents箍鼓、HTMLEvents
。
8.2呵曹、document.addEventListener()款咖,document.removeEventListener()何暮,document.dispatchEvent()
以下三個方法與document
節(jié)點的事件相關(guān)。這些方法都繼承自EventTarget接口铐殃。
// 添加事件監(jiān)聽函數(shù)
document.addEventListener('click', listener, false);
// 移除事件監(jiān)聽函數(shù)
document.removeEventListener('click', listener, false);
// 觸發(fā)事件
var event = new Event('click');
document.dispatchEvent(event);
九海洼、其他方法
9.1、document.hasFocus()
9.2富腊、document.createNodeIterator()坏逢,document.createTreeWalker()
9.3、document.adoptNode()
9.4赘被、document.importNode()
9.5是整、document.getSelection()
(本系列下一節(jié)為 — Element節(jié)點)