天天看點

DOM擴充劄記

selector api

html5 dom擴充

element traversal規範

衆多javascript庫中,最常用的一個功能就是根據css選擇符選擇與某個模式比對的dom元素

selector api level1的核心是兩個方法:

queryselector、queryselectorall

可以通過document及element的執行個體來調用他們。當使用element調用時,首先會在整個文章中查詢,然後取出在element子節點中的元素傳回。如果傳入了不支援的選擇符,會報錯。

queryselectorall()方法傳回的是一個nodelist的執行個體。能夠調用這個方法的類除了document與element外,還包括documentfragment。

selector api level2規範為element類型新增了一個matchesselector()方法。這個方法接收一個參數:css選擇符。如果元素與選擇符比對則傳回true,否則傳回false。

element.matchesselector(selector);            規範

element.msmatchesselector(selector);        ie

element.mozmatchesselector(selector);      ff

element.webkitmatchesselector(selector);   webkit

element traversal api

ie9及之前版本不會傳回文本節點,而其他浏覽器都會傳回文本節點,導緻了firstchild和childnodes的不一緻。新出的traversal 規範為:

childelementcount

firstelementchild

lastelementchild

previouselementsibling

nextelementsibling

getelementsbyclassname() ,document或element類型可以使用,傳回的是一個nodelist的執行個體。ie9+支援

calsslist屬性

在操作類名時,需要通過classname屬性添加删除。一般做法是為classname前後加上一個空格,對要增加或删除的類座同樣處理,然後進行字元串的拼接,删除,替換工作;成功後删除classname首尾的空格。

html5中為所有元素新增的classlist屬性。包含以下方法:

add、contains、remove、toggle

焦點管理

html5添加了輔助管理dom焦點的功能。document.activeelement屬性,這個屬性始終會引用dom中目前獲得了焦點的元素。元素擷取焦點的方式有頁面加載、使用者輸入、在代碼中調用了focus方法。

預設情況下,文檔剛加載完時,document.activeelement中儲存的是document.body元素的引用。文檔加載期間,document.activeelement為null.

所有浏覽器都支援該屬性。

htmldocument的變化。

1、readystate屬性

document.readystate屬性,兩個可能值:loading、complete

2、相容模式:document.compatmode;正常模式“css1compat”混雜模式“backcompat”

3、head屬性:head = document.head || document.getelementsbytagname("head")[0]   (webkit浏覽器實作)

4、自定義資料屬性

html5規定可以為元素添加非标準的屬性,但要添加“data-”字首。這些屬性可以任意添加、随便命名,隻要以data-開頭即可。添加了自定義屬性之後,可以通過元素的dataset屬性來通路自定義屬性的值。

5、标記與文本

innerhtml、outerhtml;innertext、outertext都是ie的自定義屬性,後來innerhtml與outterhtml被納入規範。

讀模式下,innerhtml屬性傳回調用元素的所有子節點的html标記;寫模式下,innerhtml會根據指定的值建立新的dom樹,然後用這個dom樹完全替換調用元素的所有子節點。

不要指望所有浏覽器的innerhtml傳回的值都相同。

使用innerhtml替換元素位元組點時,要将目前元素子節點中的javascript屬性和事件處理程式都删除,防止記憶體洩露。innerhtml中不要script和style标簽,這兩者不會生效。

并不是所有的浏覽器都支援innerhtml,比如<html>、<head><style><title>,<table>相關标簽。為這些元素設定innerhtml時,最好換一種方式:先清空元素,然後将innerhtml轉化成dom節點,插入到元素中。

6、insertadjacenthtml()方法

兩個參數:插入位置和要插入的html文本。插入位置:

beforebegin、afterbegin、beforeend、afterend這些值必須是小寫形式

7、scrollntoview

element.scrollintoview()某元素滾動到視口。

專有擴充

文檔模式:

<meta http-equiv="x-ua-compatible" content="ie=edge">使用最新版本渲染

children屬性

這個屬性是htmlcollection的執行個體,隻包含元素總同樣還是元素的子節點。ie8及更早之前的版本還會包含注釋節點,ie9修複了這個問題。

contains()方法

判斷一個元素是不是另一個元素的子節點。ie、ff、chrome都支援。

插入文本

innertext讀取時,會按照由淺入深的順序,将子文檔樹種的所有文本拼接起來。寫入時,會删除所有子節點,插入包含相應文本值的文本節點。

ff不支援這個屬性,但支援textcontent。

是以在設定innertext或者textcontent時,最好先清空子節點,然後使用document.createtextnode()建立文本節點插入。

該方法會對字元串中紅的文本進行轉義,比如:<p>test</p>

繼續閱讀