摘要:基本介紹文檔對(duì)象模型是和文檔的編程接口。提供了一系列的方法可以進(jìn)行元素的增刪改查操作查詢元素方法返回匹配指定屬性的元素節(jié)點(diǎn)。返回值是一個(gè)對(duì)象,也就是說,搜索結(jié)果是一個(gè)動(dòng)態(tài)集合,任何元素的變化都會(huì)實(shí)時(shí)反映在返回的集合中。刪除指定的類值。
1基本介紹
文檔對(duì)象模型 (DOM) 是HTML和XML文檔的編程接口。它給文檔(結(jié)構(gòu)樹)提供了一個(gè)結(jié)構(gòu)化的表述并且定義了一種方式—程序可以對(duì)結(jié)構(gòu)樹進(jìn)行訪問,以改變文檔的結(jié)構(gòu),樣式和內(nèi)容。
DOM 提供了一種表述形式將文檔作為一個(gè)結(jié)構(gòu)化的節(jié)點(diǎn)組以及包含屬性和方法的對(duì)象。從本質(zhì)上說,它將web 頁面和腳本或編程語言連接起來了。
從以上論述,我們大概知道:
文檔對(duì)象模型是HTML和XML文檔的編程接口(將web頁面和腳本連接了起來);
提供了一種表述形式將文檔作為一個(gè)結(jié)構(gòu)化的節(jié)點(diǎn)組以及包含屬性和方法的對(duì)象;
為測試方便,先構(gòu)建一個(gè)結(jié)構(gòu)樹
document對(duì)象每個(gè)載入瀏覽器的HTML文檔都會(huì)成為document對(duì)象。document對(duì)象包含了文檔的基本信息,我們可以通過JavaScript對(duì)HTML頁面中的所有元素進(jìn)行訪問、修改。
document對(duì)象具有一些常用的屬性:
doctype屬性
在書寫HTML文檔的時(shí)候第一句一般都是doctype聲明,可以通過document對(duì)象獲取,沒有則返回null;
head、body屬性
通過訪問documen的head屬性或者body屬性來獲得文檔樹的head節(jié)點(diǎn),以及body節(jié)點(diǎn),這兩個(gè)節(jié)點(diǎn)都是包括該元素的字節(jié)點(diǎn)的;
activeElement屬性
activeElement屬性返回當(dāng)前文檔中獲得焦點(diǎn)的那個(gè)元素。
用戶通??梢允褂胻ab鍵移動(dòng)焦點(diǎn),使用空格鍵激活焦點(diǎn),比如如果焦點(diǎn)在一個(gè)鏈接上,此時(shí)按一下空格鍵,就會(huì)跳轉(zhuǎn)到該鏈接
documentURI、domain、lastModified三個(gè)屬性
1.documentURI屬性返回當(dāng)前文檔的網(wǎng)址
2.domain屬性返回文檔域名
3.lastModified返回當(dāng)前文檔的最后修改時(shí)間
location屬性
location屬性返回一個(gè)只讀對(duì)象,提供了當(dāng)前文檔的URL信息
title、characterSet屬性
title屬性返回當(dāng)前文檔的標(biāo)題,該屬性是可寫的
characterSet屬性返回渲染當(dāng)前文檔的字符集
readyState
readyState屬性返回當(dāng)前文檔的狀態(tài),共有三種可能的值
loading:加載HTML代碼階段,尚未完成解析
interactive:加載外部資源階段
complete:全部加載完成
compatMode
compatMode屬性返回瀏覽器處理文檔的模式,可能的值為
BackCompat:向后兼容模式,也就是沒有添加DOCTYPE
CSS1Compat:嚴(yán)格模式,添加了DOCTYPE
cookie
cookie是存儲(chǔ)在客戶端的文本;
innerText
innerText是一個(gè)可寫屬性,返回元素內(nèi)包含的文本內(nèi)容,在多層次的時(shí)候會(huì)按照元素由淺到深的順序拼接其內(nèi)容;
以之前構(gòu)建的文檔樹為例,,返回了id為purchase元素節(jié)點(diǎn)下的文本內(nèi)容.
innerHTML、outerHTML屬性
innerHTML屬性作用和innerText類似,但是不是返回元素的文本內(nèi)容,而是返回元素的HTML結(jié)構(gòu),在寫入的時(shí)候也會(huì)自動(dòng)構(gòu)建DOM;
outerHTML 返回內(nèi)容還包括本身;
待補(bǔ)充.......................
2Element對(duì)象除了document對(duì)象,在DOM中最常用的就是Element對(duì)象了,Element對(duì)象表示HTML元素。
DOM提供了一系列的方法可以進(jìn)行元素的增、刪、改、查操作;
查詢元素
getElementById()
getElementById方法返回匹配指定ID屬性的元素節(jié)點(diǎn)。如果沒有發(fā)現(xiàn)匹配的節(jié)點(diǎn),則返回null。這也是獲取一個(gè)元素最快的方法
getElementsByClassName()
getElementsByClassName方法返回一個(gè)類似數(shù)組的對(duì)象(HTMLCollection類型的對(duì)象),包括了所有class名字符合指定條件的元素(搜索范圍包括本身),元素的變化實(shí)時(shí)反映在返回結(jié)果中。這個(gè)方法不僅可以在document對(duì)象上調(diào)用,也可以在任何元素節(jié)點(diǎn)上調(diào)用。
getElementsByClassName方法的參數(shù),可以是多個(gè)空格分隔的class名字,返回同時(shí)具有這些節(jié)點(diǎn)的元素。
getElementsByTagName()
getElementsByTagName方法返回所有指定標(biāo)簽的元素(搜索范圍包括本身)。返回值是一個(gè)HTMLCollection對(duì)象,也就是說,搜索結(jié)果是一個(gè)動(dòng)態(tài)集合,任何元素的變化都會(huì)實(shí)時(shí)反映在返回的集合中。這個(gè)方法不僅可以在document對(duì)象上調(diào)用,也可以在任何元素節(jié)點(diǎn)上調(diào)用。
getElementsByName()
getElementsByName方法用于選擇擁有name屬性的HTML元素,比如form、img、frame、embed和object,返回一個(gè)NodeList格式的對(duì)象,不會(huì)實(shí)時(shí)反映元素的變化。
以下兩種方法要考慮兼容性的問題
querySelector()
querySelector方法返回匹配指定的CSS選擇器的元素節(jié)點(diǎn)。如果有多個(gè)節(jié)點(diǎn)滿足匹配條件,則返回第一個(gè)匹配的節(jié)點(diǎn)。如果沒有發(fā)現(xiàn)匹配的節(jié)點(diǎn),則返回null。
querySelector方法無法選中CSS偽元素。
querySelectorAll()
querySelectorAll方法返回匹配指定的CSS選擇器的所有節(jié)點(diǎn),返回的是NodeList類型的對(duì)象。NodeList對(duì)象不是動(dòng)態(tài)集合,所以元素節(jié)點(diǎn)的變化無法實(shí)時(shí)反映在返回結(jié)果中。
創(chuàng)建元素
createElement()
createElement方法用來生成HTML元素節(jié)點(diǎn)。
createElement方法的參數(shù)為元素的標(biāo)簽名,即元素節(jié)點(diǎn)的tagName屬性。如果傳入大寫的標(biāo)簽名,會(huì)被轉(zhuǎn)為小寫。如果參數(shù)帶有尖括號(hào)(即<和>)或者是null,會(huì)報(bào)錯(cuò)。
createTextNode()
createTextNode方法用來生成文本節(jié)點(diǎn),參數(shù)為所要生成的文本節(jié)點(diǎn)的內(nèi)容。
createDocumentFragment()
createDocumentFragment方法生成一個(gè)DocumentFragment對(duì)象。
DocumentFragment對(duì)象是一個(gè)存在于內(nèi)存的DOM片段,但是不屬于當(dāng)前文檔,常常用來生成較復(fù)雜的DOM結(jié)構(gòu),然后插入當(dāng)前文檔。這樣做的好處在于,因?yàn)镈ocumentFragment不屬于當(dāng)前文檔,對(duì)它的任何改動(dòng),都不會(huì)引發(fā)網(wǎng)頁的重新渲染,比直接修改當(dāng)前文檔的DOM有更好的性能表現(xiàn)。
修改元素
appendChild()
在元素末尾添加元素
insertBefore()
在某個(gè)元素之前插入元素
replaceChild()
replaceChild()接受兩個(gè)參數(shù):要插入的元素和要替換的元素
刪除元素
刪除元素使用removeChild()方法即可
clone元素
cloneNode()方法用于克隆元素,方法有一個(gè)布爾值參數(shù),傳入true的時(shí)候會(huì)深復(fù)制,也就是會(huì)復(fù)制元素及其子元素(IE還會(huì)復(fù)制其事件),false的時(shí)候只復(fù)制元素本身
屬性操作
getAttribute()
getAttribute()用于獲取元素的attribute值
createAttribute()
createAttribute()方法生成一個(gè)新的屬性對(duì)象節(jié)點(diǎn),并返回它。
createAttribute方法的參數(shù)name,是屬性的名稱。
setAttribute()
setAttribute()方法用于設(shè)置元素屬性
romoveAttribute()
removeAttribute()用于刪除元素屬性
element.attributes
當(dāng)然上面的方法做的事情也可以通過類操作數(shù)組屬性element.attributes來實(shí)現(xiàn)
題目1: dom對(duì)象的innerText和innerHTML有什么區(qū)別?
dom對(duì)象的innerText和innerHTML屬性一個(gè)是輸出元素節(jié)點(diǎn)的文本,一個(gè)是輸出該節(jié)點(diǎn)下的HTML結(jié)構(gòu),差異可以通過以下實(shí)例驗(yàn)證:
題目2: elem.children和elem.childNodes的區(qū)別?
elem.children 和elem.childNodes區(qū)別在于:
elem.children主要返回的是當(dāng)前元素節(jié)點(diǎn)的所有子元素節(jié)點(diǎn);
elem.childNodes主要返回的是當(dāng)前元素節(jié)點(diǎn)的所有子節(jié)點(diǎn)(包括元素節(jié)點(diǎn),屬性節(jié)點(diǎn)以及文本節(jié)點(diǎn));
題目3:查詢元素有幾種常見的方法?ES5的元素選擇方法是什么?
查詢元素有3種常見的方法
element.getElementById()方法
返回匹配指定的ID屬性的元素節(jié)點(diǎn);
element.getElementsByClassName()方法
返回HTML collection類型的對(duì)象,該對(duì)象形式類似于數(shù)組,包括了所有class名字符合匹配條件的元素(搜索范圍包括本身),該方法不僅可以在document對(duì)象上使用,也可以在任意的元素節(jié)點(diǎn)上使用;
element.getElementsByTagName()方法
返回所有指定標(biāo)簽的元素(搜索范圍包括本身),返回值為HTML Collection 對(duì)象,該方法不僅在document對(duì)象中調(diào)用,而且可以在任意的元素節(jié)點(diǎn)上調(diào)用;
element.getElementsByName()方法
該方法用于選擇具有name屬性的HTML元素,返回一個(gè)NodeLIst格式的對(duì)象,不會(huì)實(shí)時(shí)反映元素的變化;
ES5的元素選擇方法為:
querySelectot()
該方法返回匹配指定的css選擇器的元素節(jié)點(diǎn),如果有多個(gè)元素節(jié)點(diǎn)滿足條件,則返回匹配到的第一個(gè)元素節(jié)點(diǎn);
querySelectorAll()
該方法返回匹配指定的css選擇器的所有節(jié)點(diǎn),返回的是NodeList類型的對(duì)象;
題目4:如何創(chuàng)建一個(gè)元素?如何給元素設(shè)置屬性?如何刪除屬性
創(chuàng)建元素: 通過createElement()方法來生成HTML元素節(jié)點(diǎn);
設(shè)置屬性: 通過setAttribute()方法用于設(shè)置元素屬性;
刪除屬性: 通過removeAttribute()方法來刪除元素屬性;
題目5:如何給頁面元素添加子元素?如何刪除頁面元素下的子元素?
通過元素的appendChild()方法給元素添加子元素,添加到元素末尾。
通過元素的removeChild()方法刪除元素的子元素。
題目6: element.classList有哪些方法?如何判斷一個(gè)元素的 class 列表中是包含某個(gè) class?如何添加一個(gè)class?如何刪除一個(gè)class?
add( String [, String] ) 添加指定的類值。如果這些類已經(jīng)存在于元素的屬性中,那么它們將被忽略。
remove( String [,String] ) 刪除指定的類值。
item ( Number )按集合中的索引返回class值。
toggle ( String [, force] ) 當(dāng)只有一個(gè)參數(shù)時(shí):切換 class value; 即如果類存在,則刪除它并返回false,如果不存在,則添加它并返回true。
當(dāng)存在第二個(gè)參數(shù)時(shí):如果第二個(gè)參數(shù)的計(jì)算結(jié)果為true,則添加指定的類值,如果計(jì)算結(jié)果為false,則刪除它
contains( String ) 檢查元素的類屬性中是否存在指定的類值。
使用contains方法判斷一個(gè)元素的class中是否包含某個(gè)class。add添加一個(gè)class,remove刪除一個(gè)class。
題目7: 如何選中如下代碼所有的li元素? 如何選中btn元素?
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/83939.html
摘要:的一個(gè)突出特點(diǎn)是擁有極速地渲染性能。該功能依靠的就是研發(fā)團(tuán)隊(duì)弄出的虛擬機(jī)制以及其獨(dú)特的算法。在的算法下,在同一位置對(duì)比前后節(jié)點(diǎn)只要發(fā)現(xiàn)不同,就會(huì)刪除操作前的節(jié)點(diǎn)包括其子節(jié)點(diǎn),替換為操作后的節(jié)點(diǎn)。 React的一個(gè)突出特點(diǎn)是擁有極速地渲染性能。該功能依靠的就是facebook研發(fā)團(tuán)隊(duì)弄出的虛擬dom機(jī)制以及其獨(dú)特的diff算法。下面簡單解釋一下react虛擬dom機(jī)制和diff算法的實(shí)現(xiàn)...
摘要:界面上的更改都是通過操作實(shí)現(xiàn)的,并不是通過傳統(tǒng)的刷新頁面實(shí)現(xiàn)的。操作優(yōu)化的總原則是盡量減少操作。通過在文檔片段上進(jìn)行操作,可以降低操作對(duì)頁面性能的影響,這種方式是創(chuàng)建一個(gè)文檔片段,并在此片段上進(jìn)行必要的操作,操作完成后將它附加在頁面中。 界面上UI的更改都是通過DOM操作實(shí)現(xiàn)的,并不是通過傳統(tǒng)的刷新頁面實(shí)現(xiàn) 的。盡管DOM提供了豐富接口供外部調(diào)用,但DOM操作的代價(jià)很高,頁面前端代碼的...
摘要:什么是虛擬舉例說明如果網(wǎng)頁中有一個(gè)表格,表頭是姓名,年級(jí),分?jǐn)?shù)。即我們用虛擬的結(jié)構(gòu)替換需要處理的結(jié)構(gòu),對(duì)虛擬的進(jìn)行操作之后再進(jìn)行渲染,就成為了真實(shí)的數(shù)據(jù)。當(dāng)狀態(tài)變更的時(shí)候用修改后的新渲染的的對(duì)象和舊的虛擬對(duì)象作對(duì)比,記錄著兩棵樹的差異。 虛擬DOM 可以看看這個(gè)文章如何理解虛擬DOM? - 戴嘉華的回答 - 知乎 https://www.zhihu.com/questio... 深度剖...
摘要:什么是虛擬舉例說明如果網(wǎng)頁中有一個(gè)表格,表頭是姓名,年級(jí),分?jǐn)?shù)。即我們用虛擬的結(jié)構(gòu)替換需要處理的結(jié)構(gòu),對(duì)虛擬的進(jìn)行操作之后再進(jìn)行渲染,就成為了真實(shí)的數(shù)據(jù)。當(dāng)狀態(tài)變更的時(shí)候用修改后的新渲染的的對(duì)象和舊的虛擬對(duì)象作對(duì)比,記錄著兩棵樹的差異。 虛擬DOM 可以看看這個(gè)文章如何理解虛擬DOM? - 戴嘉華的回答 - 知乎 https://www.zhihu.com/questio... 深度剖...
摘要:比較虛擬與的差異,以及對(duì)節(jié)點(diǎn)的操作,其實(shí)就是樹的差異比較,就是對(duì)樹的節(jié)點(diǎn)進(jìn)行替換。忽略掉這種特殊的情況后,大膽的修改了算法按直系兄弟節(jié)點(diǎn)比較比較。這當(dāng)中對(duì)比的細(xì)節(jié)才是整個(gè)算法最精粹的地方。 一、舊社會(huì)的頁面渲染 ???????在jQuery橫行的時(shí)代,F(xiàn)Eer們,通過各種的方式去對(duì)頁面的DOM進(jìn)行操作,計(jì)算大小,變化,來讓頁面生動(dòng)活潑起來,豐富的DOM操作,讓一個(gè)表面簡單的頁面能展示出...
摘要:摘要想稍微系統(tǒng)的說說對(duì)于的操作把和常用操作的內(nèi)容歸納成思維導(dǎo)圖方便閱讀同時(shí)加入性能上的一些問題前言在前端開發(fā)的過程中極為重要的一個(gè)功能就是對(duì)對(duì)象的操作無論增刪改查在前端頁面操作這一范圍內(nèi)都是比較消耗性能的如何高效率的便捷的操作這就是本文要講 摘要 想稍微系統(tǒng)的說說對(duì)于DOM的操作,把Javascript和jQuery常用操作DOM的內(nèi)容歸納成思維導(dǎo)圖方便閱讀,同時(shí)加入性能上的一些問題....
閱讀 2204·2021-11-15 11:38
閱讀 1164·2021-09-06 15:02
閱讀 3404·2021-08-27 13:12
閱讀 1372·2019-08-30 14:20
閱讀 2410·2019-08-29 15:08
閱讀 651·2019-08-29 14:08
閱讀 1736·2019-08-29 13:43
閱讀 1472·2019-08-26 12:11