- querySelectorAll和getElementsBy方法都可以用在element上,但是querySelector作用於Element、nodeList、DocumentFragment時的查找範圍是從整個文檔開始,返回的是一個 Static Node List(對於返回的元素會判斷是否在元素的子樹內,將在 element 子樹內的節點組成 NodeList 返回,返回的順序根據文檔順序定義),這一點和getElementsBy(返回的是一個 Live Node List)要需要區分開的;
- getElementById可以接受一個不合法的id:比如<div id="my.name"></div>用document.querySelectorAll('#my.name')毫無疑問是query不到它的,querySelectorAll 所接收的參數是必須嚴格符合 CSS 選擇符規範的。但是用document.getElementById('my.name')卻可以
- 性能上的區別:在Chrome瀏覽器下getElementBy系列的執行速度基本都是高於querySelectorAll,普遍觀點是getElementBy的性能比querySelectorAll要好很多;
- querySelectorAll屬於 W3C 中的 Selectors API 規範 [1]。而 getElementBy系列則屬於 W3C 的 DOM 規範 [2]。
整理自:https://www.zhihu.com/question/24702250