DOM(Docoment Object Model) 即文檔對象模型。也就是 JS
經過 Document
來操做網頁。本文將涉及 DOM
操做的基礎知識(增刪改查)。從 DOM
的基礎操做了解 DOM
究竟有多難用。後面咱們將會來封裝一個 DOM
的庫。今後不害怕難搞的 DOM
。html
window.xxx 或者直接xxx //元素有 id
document.getElementById('xxx') // 經過 id 獲取元素
document.getElementsByTagName('div')[0] // 經過標籤名獲取元素,需注意的是因爲獲取的是尾數組,因此要加上下標
document.getElementsByClassName('red')[0] //經過 class 屬性名獲取元素,也須要加下標
document.querySelector('xxx') // 推薦用法。兼容以上全部 api 的功能。
document.querySelectorAll('.red')[0] // 推薦用法。獲取是該條件下全部的元素。因此要獲得具體的元素需加下標。
複製代碼
querySelector
和 querySelectorAll
。document.documentElement
node
document.head
api
document.body
數組
window
瀏覽器
document.all
bash
document.all
這個 API 是第 7 個 falsy
值。app
document.all ? console.log(1) : console.log(2)
// 2
複製代碼
別問,問就是 IE 的鍋。有興趣者本身百度。 還有其他6個 falsy
值分別是 false
、"", '', ``
、null
、 undefined
、NaN
、 0
函數
let div1 = document.createElement('div')
document.createElement('style')
document.createElement('script')
document.createElement('li')
複製代碼
text1 = document.createTextNode('你好')
複製代碼
div1.appendChild(text1)
div1.innerText = '你好' 或者 div1.textContent = '你好'
可是不能使用 div1.appendChild('你好')
複製代碼
舊方法: parentNode.removeChild(childNode)
新方法: childNode.remove()
複製代碼
改 class: div.className = 'red blue' (全覆蓋)
改 class: div.classList.add('red') // 在原基礎上增長
改 style: div.style = 'width: 100px;color:blue;'
改 style 的一部分: div.style.width = '200px'
大小寫: div.style.backgroundColor = 'white'
改 data-*屬性: div.dataset.x = 'wuxuwei'
複製代碼
div.classList / a.href
div.getAttribute('class') / a.getAttribute('href')
複製代碼
div
不會有任何事情發生div.onclick
改成一個函數 fn
div
的時候,瀏覽器就會調用這個函數fn.call(div,event)
div.innerText = 'xxx'
div.textContent = 'xxx'
幾乎沒有區別
複製代碼
div.innerHTML = '<strong>重要內容</strong>'
ui
div.innerHTML = '' // 先清空
div.appendChild(div2) // 再加內容
複製代碼
newParent.appendChild(div)
this
node.parentNode / node.parentElement
node.parentNode.parentNode
node.childNodes / node.children
node.parentNode.childNodes
還要排除本身 node.parentNode.children
還要排除本身
node.firstChild
node.lastChild
node. previousSibling
node.nextSibling
travel = (node, fn) => {
fn(node)
if(node.children) {
for(let i = 0;i < node.children.length; i++) {
travel(node.children[i],fn)
}
}
}
travel(div1,(node)=> console.log(node))
複製代碼