DOM

一.概念

DOM(Document Object Model)的縮寫,即文檔對象模型
DOM是針對HTML和XML文檔的一個API。
DOM描繪了一個層次化的節(jié)點(diǎn)樹,即HTML文檔中的所有內(nèi)容都是節(jié)點(diǎn)(node)。
DOM樹中的所有節(jié)點(diǎn)均可通過JS進(jìn)行訪問,允許開發(fā)人員添加.移除.修改和查詢頁面的某一部分

二.DOM

1.節(jié)點(diǎn)類型

1.1.文檔節(jié)點(diǎn)

整個文檔是一個'文檔節(jié)點(diǎn)'

1.2.元素節(jié)點(diǎn)

每一個HTML元素是'元素節(jié)點(diǎn)'

1.3.文本節(jié)點(diǎn)

HTML元素內(nèi)的文本是'文本節(jié)點(diǎn)'(回車也是文本節(jié)點(diǎn))

1.4.屬性節(jié)點(diǎn)

每個HTML的屬性是'屬性節(jié)點(diǎn)'

1.5.注釋節(jié)點(diǎn)

注釋是'注釋節(jié)點(diǎn)'

2.nodeType屬性

返回一個整數(shù),這個數(shù)值代表節(jié)點(diǎn)的類型
1.元素節(jié)點(diǎn) 返回1
2.屬性節(jié)點(diǎn) 返回2
3.文本節(jié)點(diǎn) 返回3
4.注釋節(jié)點(diǎn) 返回8
5.文檔節(jié)點(diǎn) 返回9

3.nodeName屬性

返回節(jié)點(diǎn)的名稱
1.元素節(jié)點(diǎn) 返回 標(biāo)簽名稱(大寫)
2.屬性節(jié)點(diǎn) 返回 屬性名稱
3.文本節(jié)點(diǎn) 返回 永遠(yuǎn)都是 #text
4.注釋節(jié)點(diǎn) 返回 永遠(yuǎn)都是 #comment
5.文檔節(jié)點(diǎn) 返回 永遠(yuǎn)都是 #document

4.tagName屬性

返回元素的標(biāo)簽名
在HTML中,tagName屬性的返回值始終是大寫的

5.nodeValue屬性

返回節(jié)點(diǎn)的值
1.元素節(jié)點(diǎn) 返回 undefined或者null
2.文本節(jié)點(diǎn) 返回 文本內(nèi)容
3.屬性節(jié)點(diǎn) 返回 屬性值
4.注釋節(jié)點(diǎn) 返回 注釋內(nèi)容
5.文檔節(jié)點(diǎn) 返回 null
注:對于元素節(jié)點(diǎn),用innerHTML/innerText/value設(shè)置或取值

6.節(jié)點(diǎn)關(guān)系

節(jié)點(diǎn)之間的關(guān)系,通常用家庭中的輩分關(guān)系來描述

  • parentNode:父節(jié)點(diǎn)
  • children:所有元素子節(jié)點(diǎn)
  • childNodes:所有子節(jié)點(diǎn),ie678與高版本瀏覽器返回值不一樣
  • nextSibling:下一個兄弟節(jié)點(diǎn)
  • previousSibling: 上一個兄弟節(jié)點(diǎn)
  • firstChild:第一個子節(jié)點(diǎn)
    -lastChild:最后一個子節(jié)點(diǎn)
   屬性1                              屬性2                               描述
nextSibling                 nextElementSibling 不兼容IE678           下一個兄弟節(jié)點(diǎn)
previousSibling             previousElementSibling 不兼容IE678       上一個兄弟節(jié)點(diǎn)
firstChild                  firstElementChild 不兼容IE678            第一個子節(jié)點(diǎn)
lastChild                   lastElementChild 不兼容IE678             最后一個子節(jié)點(diǎn)

7.節(jié)點(diǎn)方法

方法 描述 兼容性
createElement(‘標(biāo)簽名’) 創(chuàng)建元素節(jié)點(diǎn)
createTextNode(’’) 創(chuàng)建文本節(jié)點(diǎn)
document.getElementById(’’) 根據(jù)id獲取元素
document.getElementByName(’’) 根據(jù)name屬性獲取元素,name屬性不唯一
document.getElementByTagName(’’) 獲取指定標(biāo)簽名的所有元素列表
document.getElementByClassName(‘類名’) 獲取指定className的元素 IE678不支持
document.querySelector('選擇器') 通過選擇器方式獲取元素(返回一個元素) IE678不支持
document.querySelectorAll('選擇器') 通過選擇器方式獲取元素(返回多個元素) IE678不支持
document.documentElement 獲取html元素對象
document.body 獲取body元素對象
appendChild(node) 末尾插入一個節(jié)點(diǎn)node
insertBefore(newNode,target) target之前插入節(jié)點(diǎn)node
removeChild(node) 移除某個子節(jié)點(diǎn)
replaceChild(newNode,oldNode) newNode替換oldNode
cloneNode(boolean) 復(fù)制一個節(jié)點(diǎn):true:深復(fù)制,復(fù)制節(jié)點(diǎn)及整個子節(jié)點(diǎn)樹false :淺復(fù)制,只復(fù)制節(jié)點(diǎn)本身
getAttribute(‘name’) 獲取節(jié)點(diǎn)上的name屬性的值
setAttribute(‘name’,‘value’) 設(shè)置節(jié)點(diǎn)上name屬性的值為value
removeAttribute(‘name’) 刪除節(jié)點(diǎn)上name屬性
getAttributeNode(‘type’) 獲取節(jié)點(diǎn)上的type屬性節(jié)點(diǎn)

DocumentFragment

documentFragment是一個文檔碎片,是一種‘輕量級節(jié)點(diǎn)’,是一個虛擬的節(jié)點(diǎn)對象
documentFragment的nodeType值為11,nodeName的值為f#document-fragment
通常作為倉庫來使用,不存在DOM樹上,將多個需要插入的新節(jié)點(diǎn)放在文檔碎片上,再插入文檔中可以優(yōu)化DOM操作

 var Fragment=document.createDocumentFragment();  //創(chuàng)建一個文檔碎片

8.獲取元素樣式

行間樣式和非行間樣式

8.1行間樣式:

<div class="box2" style="width: 200px;height: 100px;background:blue;"></div>
console.log( box1.style.width );

8.2非行間樣式:

css:
.box1{
    width: 100px;
    height: 100px;
    background: red;
}
html:
<div class="box1"></div>
console.log( box2.style.width );

8.3getComputedStyle獲取樣式(不兼容IE678)
getComputedStyle(對象,參數(shù)).樣式
第一個參數(shù)是元素對象
第二個參數(shù)可以是任何數(shù)據(jù),通常寫為null或false

eg:
    getComputedStyle(box1,null).width;

注:currentStyle:IE678獲取樣式的方法
如:obj.currentStyle.樣式
兼容性處理:

function getStyle(dom,attr){
    if (dom.currentStyle) {//IE
        return dom.currentStyle[attr];
    } else {
        return getComputedStyle(dom,null)[attr];
    }
}

9.offset/client系列屬性

屬性 描述
offsetLeft 獲取對象左側(cè)與定位父級之間的距離(默認(rèn)是body)
offsetTop 獲取對象上側(cè)面與定位父級之間的距離(默認(rèn)是body)
offsetWidth 獲取元素自身的寬度(包含邊框)
offsetHeight 獲取元素自身的高度(包含邊框)
clientLeft,clientTop 獲取元素內(nèi)容到邊框的距離,效果和邊框?qū)挾认嗤?很少使用
clientWidth 獲取元素自身的寬度(不含邊框)
clientHeight 獲取元素自身的高度(不含邊框)
document.documentElement.clientWidth 瀏覽器的可視區(qū)寬度
document.documentElement.clientHeight 瀏覽器可視區(qū)高度
document.body.clientWidth body的寬度
document.body.clientHeight body的高度
document.documentElement.offsetWidth 整個文檔寬度
douument.documentElement.offsetHeight 整個文檔高度
document.body.scrollTop 獲取當(dāng)前滾動的高度(有兼容性問題)

獲取滾動條高度一般使用如下方式:
var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容