DOM


DOM(文檔對(duì)象模型)

什么是DOM?

D 代表 Document, DOM 將 HTML 頁(yè)面解析為一個(gè) 文檔。同時(shí)提供了 document 對(duì)象。
O 代表 Object, DOM 將 HTML 頁(yè)面中每個(gè)元素解析為一個(gè) 對(duì)象。例如 <div> 元素在 DOM 中對(duì)應(yīng)就是 HTMLDivElement 對(duì)象。
M 代表Model,DOM 中表示各個(gè)對(duì)象之間的關(guān)系。也就是DOM樹(shù)。
--DOM樹(shù)


image.png

DOM操作

--JavaScript 能夠操縱頁(yè)面中的 HTML 元素
--JavaScript 能夠操縱頁(yè)面中的 HTML 屬性
--JavaScript 能夠改變頁(yè)面中的 CSS 樣式
--JavaScript 能夠?qū)?yè)面中的事件做出響應(yīng)


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

DOM = HTML + 其他多種類型(元素、屬性、文本等)
所有組成DOM的內(nèi)容都稱作DOM節(jié)點(diǎn)。

--節(jié)點(diǎn)類型


image.png

querySelector與getElement系列的區(qū)別

https://www.zhihu.com/question/24702250

attribute與propety的區(qū)別

attribute包含自定義屬性和預(yù)定義屬性,而propety只包含預(yù)定義屬性

<1>非布爾值
attribute與propety會(huì)實(shí)時(shí)同步關(guān)系
<2>布爾值屬性
--propety不會(huì)同步attribute
--如果沒(méi)有修改過(guò)propety,attribute會(huì)實(shí)時(shí)同步propety,
一旦修改過(guò)propety,attribute不會(huì)實(shí)時(shí)同步proprty
####瀏覽器響應(yīng)的是propety,用戶操作的也是propety

事件對(duì)象

eg:
div.onclick = function(ev){  //形參ev:一般情況下瀏覽器會(huì)將事件對(duì)象作為事件回調(diào)的第一個(gè)參數(shù)傳入
ev = ev||event;        //event:某些瀏覽器將事件對(duì)象綁給了window對(duì)象(window.event)
}

DOM中關(guān)于獲取CSS尺寸&位置的API

--尺寸

clientWidth&clientHeight     //padding-box
offsetWidth&offsetHeight    //border-box(=padding-box+border,此API獲取的尺寸與盒模型的值有關(guān),根據(jù)盒模型的值而發(fā)生變化)

//獲取視口的大小
document.documentElement.clientWidth
document.documentElement.clientHeight

--位置

clientX&clientY       //clientX:觸發(fā)事件時(shí),在X軸上,鼠標(biāo)距離視口的位置
                              //clientY:觸發(fā)事件時(shí),在Y軸上,鼠標(biāo)距離視口的位置
getBoundingClientRect()     //元素相對(duì)視口的位置(getBoundingClientRect().left,getBoundingClientRect().top)

offsetleft&offsettop&offsetParent

阻止事件的默認(rèn)行為

--HTML阻止事件的默認(rèn)行為
1.<a href = "javascript:;"></a>
2.<a href = "#"></a> //地址欄中會(huì)產(chǎn)生錨點(diǎn)#,所以不推薦使用
--DOM0阻止事件的默認(rèn)行為
1.ev.preventDefalut();
2.return false;
--DOM2阻止事件的默認(rèn)行為
ev.preventDefalut();
注意點(diǎn):只有當(dāng)cancelble為true時(shí)才能取消事件默認(rèn)行為,否則不能取消事件默認(rèn)行為


事件流

事件流以事件為單位。
--DOM0事件流只有冒泡
--DOM2事件流既有冒泡(false)也有捕獲(true)
--冒泡的條件:
HTML結(jié)構(gòu)有嵌套(父子關(guān)系)
嵌套結(jié)構(gòu)有相同的事件
--捕獲定義:
當(dāng)觸發(fā)事件時(shí),瀏覽器會(huì)從根節(jié)點(diǎn)開(kāi)始由外向內(nèi)進(jìn)行傳播(如果子元素與父元素都綁定了相應(yīng)事件,會(huì)先觸發(fā)父元素)
--冒泡定義:
當(dāng)觸發(fā)事件時(shí),;瀏覽器會(huì)從子節(jié)點(diǎn)開(kāi)始由內(nèi)向外進(jìn)行傳播(先觸發(fā)子元素再冒泡到父元素)

完整的事件流

捕獲---->目標(biāo)處理(無(wú)捕獲和冒泡)---->冒泡

阻止冒泡

1.ev.stopProgation();
2.ev.cancleBubble = true;

阻止冒泡&阻止事件默認(rèn)行為

如果一個(gè)節(jié)點(diǎn)的父級(jí)阻止了默認(rèn)行為,會(huì)影響到子級(jí)(子級(jí)也會(huì)阻止事件的默認(rèn)行為),但可以通過(guò)阻止冒泡來(lái)使父子之間通信,這樣子級(jí)就可以使用默認(rèn)行為(因?yàn)檫@時(shí)子級(jí)無(wú)法知道父級(jí)是否阻止了默認(rèn)行為)


image.png

事件委托

事件委托要基于事件冒泡,當(dāng)子節(jié)點(diǎn)有共性操作是使用事件委托
事件委托:一般來(lái)講,會(huì)將一個(gè)或一組元素的事件委托到它的父級(jí)或更外層元素元素上,真正綁定事件的是外層元素,當(dāng)事件響應(yīng)到需要綁定的元素時(shí),會(huì)通過(guò)事件冒泡機(jī)制從而觸發(fā)它的外層元素的綁定事件上,然后在外層元素上去執(zhí)行函數(shù)。

eg:
<ul>
  <li>item1</li>
  ...
  <li>itemn</li>
</ul>
<script>
  window.onload = function(){
    var ul = document.queraySelector("ul");
    //ul是currentTarget,始終是監(jiān)聽(tīng)事件者,而target是事件的真正發(fā)出者
    ul.onclick = function(ev){
        ev = ev||event;
        if(ev.target.nodeName.toupperCase()==[]){
          alert(ev.target.textContent);
}
}
}
</script>

事件分類

具體的事件分類可參考以下地址:

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

相關(guān)閱讀更多精彩內(nèi)容

  • ??DOM 1 級(jí)主要定義的是 HTML 和 XML 文檔的底層結(jié)構(gòu)。 ??DOM2 和 DOM3 級(jí)則在這個(gè)結(jié)構(gòu)...
    霜天曉閱讀 1,599評(píng)論 1 3
  • 之前通過(guò)深入學(xué)習(xí)DOM的相關(guān)知識(shí),看了慕課網(wǎng)DOM探索之基礎(chǔ)詳解篇這個(gè)視頻(在最近看第三遍的時(shí)候,準(zhǔn)備記錄一點(diǎn)東西...
    微醺歲月閱讀 4,760評(píng)論 2 61
  • DOM模型 DOM(文檔對(duì)象模型)是針對(duì)HTML和XML的一個(gè)API,DOM描繪了一個(gè)層次化的節(jié)點(diǎn)樹(shù),允許開(kāi)發(fā)人員...
    FWHeart閱讀 788評(píng)論 0 2
  • 一個(gè)完整的JavaScript實(shí)現(xiàn)應(yīng)該由下列三個(gè)不同的部分組成: (1)核心(ECMAScript)(2)文檔對(duì)象...
    肆意咯咯咯閱讀 549評(píng)論 0 0
  • 這周又沒(méi)看書(shū),感到滿滿的罪惡感! 這周這開(kāi)始一個(gè)新的課題,是關(guān)于android log細(xì)化的,為了解決市場(chǎng)...
    祝三壯閱讀 216評(píng)論 1 1

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