快速獲取html元素方法:html
document.documentElement
// js高級程序設計一書中有段這樣的代碼:
let html = document.documentElement; //取得對<html>的引用
html === document.childNodes[0]; //true
html === document.firstChild; //true
// 實測新版Chrome瀏覽器(版本 75.0.3770.100 64位)
html === document.childNodes[1]; // true
document.childNodes[0] === document.firstChild // true
document.doctype === document.childNodes[0]; // true
複製代碼
快速獲取body元素方法:node
document.body
複製代碼
ParentNode.children 和 Node.childNodes 區別瀏覽器
若是咱們想遍歷元素的話,選擇 ParentNode.children 應該是會更方便一些以上兩個屬性返回的元素集合都是實時的,所以不用擔憂因爲js腳本修改dom致使須要從新獲取元素信息。dom
function ergodicDom(elem) {
let domTreeObj = {}; //使用對象來展示dom樹
!function innerFun(elem, obj, i) {
if (elem.nodeName === 'SCRIPT' || elem.nodeName === 'STYLE') {
return;
}
let name = i ? elem.nodeName + i : elem.nodeName;
obj[name] = {};
if (elem.children.length > 0) {
[].forEach.call(elem.children, (element, i)=>{
innerFun(element, obj[name], i)
})
}
}(elem, domTreeObj)
return domTreeObj;
}
複製代碼
隨手寫的,發現用了 ParentNode.children 的話就不須要判斷 nodeType 了,有不足之處歡迎補充ui