querySelectorAll和getElementsByClassName獲取元素的區別


querySelectorAll()方法是HTML5新增的方法,通過傳入一個css選擇符,返回所有匹配的元素而不僅僅是一個元素。這個方法返回的是一個NodeList的實例。那么它和通過getElementsByClassName等獲取元素有什么區別?

最大的區別就是querySelectorAll的實現類似於一組元素的快照,而並非對文檔結構進行搜索的動態查詢。所謂快照就是把某個時刻dom中的結構記錄下來,而不是通過查詢dom結構動態獲取。這樣實現可以避免使用NodeList對象通常會引起的大多數性能問題,但是也會帶來新的問題,比如dom結構發生變化,這個選擇器就無法使用了。

如上圖所示:在原來的dom中有5個div通過document.querySelectorAll進行獲取,但是如果我們再給body增加一個新的dom結點,那么對這個aItem列表中元素進行操作,會發現沒有效果,這是因為querySelector得到的是一個靜態列表,它不會對domj結構進行動態查詢,再次重新獲取。

相反,document.getElementsByClassName是動態查詢的過程,會隨着dom結構的變化,得到的結點列表也會發生變化。如下圖所示:通過getElementsByClassName獲取的是動態列表,可以隨着dom結構的變化而變化。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM