js高級(jí)程序設(shè)計(jì) 第 十一 章 DOM 擴(kuò)展

選擇符 API

querySelector( CSS選擇符 ):返回與該模式匹配的第一個(gè)元素,若沒(méi)有找到匹配元素則返回null;通過(guò)Document類(lèi)型調(diào)用querySelector( )方法時(shí),會(huì)在文檔元素的范圍內(nèi)查找匹配的元素,而通過(guò)Element類(lèi)型調(diào)用querySelector( )方法時(shí),只會(huì)在該元素后代元素的范圍內(nèi)查找匹配的元素。
querySelectorAll( CSS選擇符 ):返回的是所有匹配元素而不僅僅是一個(gè)元素,這個(gè)方法返回的是一個(gè)NodeList的實(shí)例,且返回的是帶有所有屬性和方法的NodeList,而且底層實(shí)現(xiàn)則類(lèi)似與一組元素的快照,而非不斷對(duì)文檔進(jìn)行搜索的動(dòng)態(tài)查詢。
matchesSelector( CSS選擇符?):如果調(diào)用元素與該選擇符匹配,返回true;否則,返回false。

元素遍歷

對(duì)于元素間的空格,IE9及之前的版本不會(huì)返回文本節(jié)點(diǎn),而其他的所有瀏覽器都會(huì)返回文本節(jié)點(diǎn),為了彌補(bǔ)這一差異,Element Traversal 規(guī)范新定義了一組屬性,如下:
childElementCount:返回子元素(不包括文本節(jié)點(diǎn)和注釋)的個(gè)數(shù);
firstElementChild:指向第一個(gè)子元素;firstChild的元素版;
lastElementChild:指向最后一個(gè)子元素;lastChild的元素版;
previousElementSibling:指向前一個(gè)同輩元素;previousSibling的元素版;
nextElementSibling:指向后一個(gè)同輩元素;nextSibling的元素版;
利用這些屬性,可以不必?fù)?dān)心空白文本節(jié)點(diǎn)。

HTML5

1、與類(lèi)相關(guān)的擴(kuò)充

getElementsByClassName( 一個(gè)或多個(gè)類(lèi)名的字符串 ):返回帶有指定類(lèi)的所有元素的NodeList,傳入多個(gè)類(lèi)名時(shí),類(lèi)名的先后順序不重要。調(diào)用該方法時(shí),只有位于調(diào)用元素子樹(shù)中的元素才會(huì)返回。
classList 屬性:HTML5新增操作類(lèi)名的方式,包含下面四個(gè)方法:
add ( value ):將給定的字符串值添加到列表中,如果值已經(jīng)存在,就不添加了。
contains ( value ):表示列表中是否存在給定的值,如果存在則返回true,否則返回false。
remove( value ):從列表中刪除給定的字符串。
toggle ( value ):如果列表中已經(jīng)存在給定的值,刪除它,如果列表中沒(méi)有給定的值,添加它。

2、焦點(diǎn)管理

HTML5添加了輔助管理DOM焦點(diǎn)的功能
document.activeElement屬性:始終會(huì)引用DOM中當(dāng)前獲得了焦點(diǎn)的元素;默認(rèn)情況下,文檔剛剛加載完成時(shí),document.activeElement中保存的是document.body元素的引用,文檔加載期間,document.activeElement的值為null。
focus( )方法:使用該方法獲取焦點(diǎn);
document.hasFocus( )方法:用于確定文檔是否獲得了焦點(diǎn)。

3、HTMLDocument的變化

document.readyState 屬性:用來(lái)實(shí)現(xiàn)一個(gè)指示文檔已經(jīng)加載完成的指示器,loading表示正在加載文檔;complete表示已經(jīng)加載完文檔;
docuemnt.compatMode屬性:用于檢測(cè)頁(yè)面的兼容模式,CSS1Compat表示標(biāo)準(zhǔn)模式;BackCompat表示混雜模式

4、字符集屬性

charset 屬性:表示文檔中實(shí)際使用的字符集;
defaultCharset 屬性:表示根據(jù)默認(rèn)瀏覽器及操作系統(tǒng)的設(shè)置,當(dāng)前文檔默認(rèn)的字符集應(yīng)該是什么,如果文檔沒(méi)有使用默認(rèn)的字符集,那charset和defaultCharset屬性的值可能會(huì)不一樣。

5、自定義數(shù)據(jù)屬性

HTML5規(guī)定可以為元素添加非標(biāo)準(zhǔn)的屬性,但要添加前綴data-,目的是為元素提供與渲染無(wú)關(guān)的信息,或者提供語(yǔ)義信息。這些屬性可以任意添加、隨便命名,只要以data-開(kāi)頭即可。
可以通過(guò)元素的dataset屬性來(lái)訪問(wèn)自定義屬性的值,如取得自定義屬性的值:var appId = div.dataset.appId

6、插入標(biāo)記

innerHTML屬性:在讀模式下,innerHTML屬性返回與調(diào)用元素的所欲有子節(jié)點(diǎn)(包括元素、注釋和文本節(jié)點(diǎn))對(duì)應(yīng)的HTML標(biāo)記,在寫(xiě)模式下,innerHTML會(huì)根據(jù)指定的值創(chuàng)建新的DOM樹(shù),然后用這個(gè)DOM樹(shù)完全替換調(diào)用元素原先的所有子節(jié)點(diǎn)。
不支持innerHTML的元素有:<col>、<colgroup>、<frameset>、<head>、<html>、<style>、<table>、<tbody>、<thead>、<tfoot>、<tr>
outerHTML屬性:在讀模式下,outerHTML返回調(diào)用它的元素及所有子節(jié)點(diǎn)的HTML標(biāo)簽,在寫(xiě)模式下,outerHTML會(huì)根據(jù)給定的HTML字符串創(chuàng)建新的DOM子樹(shù),然后用這個(gè)DOM子樹(shù)完全替換調(diào)用元素。
insertAdjacentHTML( 插入的位置,要插入的HTML文本 )
第一個(gè)參數(shù)必須是下列值之一:
beforebegin:在當(dāng)前元素之前插入一個(gè)緊鄰的同輩元素;
afterbegin:在當(dāng)前元素之下插入一個(gè)新的子元素或在第一個(gè)子元素之前再插入新的子元素;
beforeend:在當(dāng)前元素之下插入一個(gè)新的子元素或者在最后一個(gè)子元素再插入新的子元素;
afterend:再當(dāng)前元素之后插入一個(gè)緊鄰的同輩元素;
需注意的點(diǎn)是:在使用innerHTML、outerHTML屬性和insertAdjacentHTML( )方法時(shí),最好先手工刪除要被替換的元素的所有事件處理程序和JavaScript對(duì)象屬性。同時(shí)要將設(shè)置innerHTML和outHTML的次數(shù)控制再合理的范圍內(nèi),這樣可以減少帶來(lái)的性能損失。

7、scrollIntoView( ) 方法

scrollIntoView( )可以在所有HTML元素上調(diào)用,通過(guò)滾動(dòng)瀏覽器窗口或某個(gè)容器元素,調(diào)用元素就可以出現(xiàn)在視口中,如果給這個(gè)方法傳入true作為參數(shù),或者不傳入任何參數(shù),那么窗口滾動(dòng)之后會(huì)讓調(diào)用元素的頂部與視口頂部盡可能齊平,傳入false,調(diào)用元素會(huì)盡可能全部出現(xiàn)在視口中(可能的話,調(diào)用元素的底部會(huì)與視口頂部平齊)不過(guò)頂部不一定齊平。

<meta>標(biāo)簽設(shè)置文檔模式

contains( )方法:用于確認(rèn)某個(gè)節(jié)點(diǎn)是不是另一個(gè)節(jié)點(diǎn)的后代,返回true/false。

插入文本

innerText屬性與outerText屬性與innerHTML和outerHTML屬性類(lèi)似

滾動(dòng)

scrollIntoViewIfNeeded( alignCenter ):只在當(dāng)前元素在視口中不可見(jiàn)的情況下,才滾動(dòng)瀏覽器窗口或容器元素,最終讓它可見(jiàn)。如果當(dāng)前元素在視口中可見(jiàn),則方法什么都不處理,如果將可選的alignCenter參數(shù)設(shè)置為true,則表示盡量將元素顯示在視口的中部(垂直方向);
scrollByLines( lineCount ):將元素的內(nèi)容滾動(dòng)指定的行高,lineCount值可以時(shí)正值也可以是負(fù)值。
scrollByPages( pageCount ):將元素的內(nèi)容滾動(dòng)指定的頁(yè)面高度,具體高度由元素的高度決定。
需要注意的是,scrollIntoView()和scrollIntoViewIfNeeded()的作用對(duì)象是元素的容器,而scrollByLines()和scrollByPages()影響的則是元素自身。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容