document.getElementsByTagName('tag');
css
document.getElementById('id');
jquery
數組
常見的獲取元素的方法有3種,分別是經過元素ID、經過標籤名字和經過類名字來獲取。
getElementById方法,這個方法將返回一個與之對應id屬性的節點對象,它是document對象特有的函數,只能經過其來調用該方法,使用方法以下:document.getElementById('idName');app
getElementsByTagName方法返回一個對象數組(準確的說是HTMLCollection集合),返回元素的順序是它們在文檔中的順序,傳遞給 getElementsByTagName() 方法的字符串能夠不區分大小寫,使用方法以下:document.getElementsByTagName(tagName);框架
getElementsByClassName方法獲取指定class名的元素,該方法返回文檔中全部指定類名的元素集合,做爲 NodeList 對象。NodeList 對象表明一個有順序的節點列表。NodeList 對象 咱們可經過節點列表中的節點索引號來訪問列表中的節點(索引號由0開始), 因此有時使用時要指定下標,使用方法以下:document.getElementsByClassName('className');函數
querySelector() 方法返回匹配指定 CSS 選擇器元素的第一個子元素 。 該方法只返回匹配指定選擇器的第一個元素。性能
若是要返回全部匹配元素,須要使用 querySelectorAll() 方法替代.測試
不一樣的是 querySelector返回的是一個對象,querySelectorAll返回的一個集合(NodeList)。spa
querySelector和querySelectorAll的參數必須是符合 css selector 的字符串:它傳入的字符串中第一個字符不能是數字..net
代碼實例:
document.querySelector("body"); //返回body節點 document.querySelector("#k"); //返回id爲k的節點 document.querySelector("#k span"); //返回id爲k的節點下的第一個span節點 document.querySelector("#k").querySelector("span"); //返回id爲k的節點下的第一個span節點 document.querySelectorAll("li"); //返回所用tagName爲li的節點集合(NodeList) document.querySelectorAll("div .li"); //返回class爲li的div
由於querySelectorAll返回一個靜態的NodeList(深克隆)getElementBy系列返回一個動態的實時變化的NodeList(HTMLCollection)(淺克隆,每次都返回一個指針)
因此querySelectorAll會下降性能
用querySelector操做元素示例以下:
HTML代碼:
<ul> <li>111</li> <li>222</li> <li>333</li> </ul> var ul=document.querySelector('ul'); var list=ul.querySelectorAll('li'); for(var i=0;i<list.length;i++){ ul.appendChild(document.createElement('li')); }//這個時候就建立了3個新的li,添加在ul列表上。 console.log(list.length) //輸出的結果仍然是3,不是此時li的數量6
反觀getElement方法
var ul=document.getElementsByTagName('ul')[0]; var list=ul.getElementsByTagName('li'); for(var i=0;i<5;i++){ ul.appendChild(document.createElement('li')); } console.log(list.length)//此時輸出的結果就是3+5=8
因此咱們如今應該能夠很直觀的分別出二者的區別,固然自己兩種方法還有兼容性方面的區別。另外這兩種方法都不能查找僞類元素。
console.time('querySelectorAll'); for (var i = 0; i < 10000; i++) { document.querySelectorAll(".menu-top"); } console.timeEnd('querySelectorAll'); //querySelectorAll: 1781ms console.time('getElementsByClassName'); for (var i = 0; i < 10000; i++) { document.getElementsByClassName("menu-top"); } console.timeEnd('getElementsByClassName'); //getElementsByClassName: 54ms
獲得集合時間對比相差巨大。但是如今主流框架,好比jquery,手機上的框架jqmobi等內部實現查找元都是使用的 querySelector等方法,性能低的方法被使用惟一理由就是 它用着方便。
在使用的時候getElement這種方法性能比較好,query選擇符則比較方便.
參考:
https://blog.csdn.net/levinhax/article/details/71274456
https://www.imooc.com/article/13027
https://www.jianshu.com/p/421f6d0a9419
https://blog.csdn.net/hualimeme/article/details/44410895