Dom、事件

dom 對象的 innerText 和 innerHTML 的區(qū)別

  • innerText是指內(nèi)部文本;讀取時(shí)會(huì)將節(jié)點(diǎn)內(nèi)部的所有文本內(nèi)容做一個(gè)拼接后輸出;寫入時(shí)寫入的內(nèi)容覆蓋節(jié)點(diǎn)內(nèi)部所有的內(nèi)容,并且輸入內(nèi)容會(huì)強(qiáng)行轉(zhuǎn)義為文本。
  • interHTML是指內(nèi)部html構(gòu)成;讀取時(shí)會(huì)將內(nèi)部的子節(jié)點(diǎn)及其內(nèi)容等原封不動(dòng)輸出;寫入時(shí)也是覆蓋內(nèi)部內(nèi)容,輸入內(nèi)容含標(biāo)簽是會(huì)正常起作用。

elem.children 和 elem.childNodes 的區(qū)別

  • elem.children得到的是elem這個(gè)節(jié)點(diǎn)的子Html節(jié)點(diǎn)的集合(放在數(shù)組中)不包含空白文本節(jié)點(diǎn);
  • elem.childNodes得到的是elem這個(gè)節(jié)點(diǎn)的子節(jié)點(diǎn)的集合(放在數(shù)組中),但是會(huì)包括空白文本節(jié)點(diǎn)。所以一般使用elem.children比較多。

查詢元素有幾種常見的方法

  • getElementById:通過id來選擇元素,返回對應(yīng)id的元素節(jié)點(diǎn)包含其內(nèi)部元素節(jié)點(diǎn),在document對象下使用;
  • getElementsByClassName:通過類名來選擇元素,返回一個(gè)儲(chǔ)存duiy對應(yīng)類名的類數(shù)組對象,要用arr[i]來使用,在documentelement下使用;
  • getElementsByTagName:通過標(biāo)簽名來選擇元素,返回一個(gè)儲(chǔ)存duiy對應(yīng)類名的類數(shù)組對象,要用arr[i]來使用,在documentenement下使用;
  • getElementByName:用來選擇一些具有name屬性的html元素,比如form、img等,返回一個(gè)儲(chǔ)存對應(yīng)類名的類數(shù)組對象,要用arr[i]來使用,在document下使用;IE瀏覽器中會(huì)返回沒有name屬性的同名id元素!
  • querrSelector:類似css選擇器語法,會(huì)返回匹配的元素節(jié)點(diǎn),如果有多個(gè)滿足條件的元素節(jié)點(diǎn)將只返回第一個(gè)。
  • querySelectorAll:與querrSelector類似,不過它會(huì)返回所有滿足條件的元素節(jié)點(diǎn)。

創(chuàng)建一個(gè)元素、給元素設(shè)置屬性

  • var element=document.createElement(元素名)開創(chuàng)建一個(gè)元素;
  • 元素名.setAttribute('屬性名','值')來給元素設(shè)置屬性。

元素的添加、刪除

  • node.appendChild(新元素節(jié)點(diǎn))將元素節(jié)點(diǎn)插入到node節(jié)點(diǎn)作為最后一個(gè)子節(jié)點(diǎn);也可以用node.inserBefore(新元素節(jié)點(diǎn),子參照節(jié)點(diǎn))將元素插入到node的參照子節(jié)點(diǎn)前;
  • removeChild(要移除的元素)將節(jié)點(diǎn)的子元素刪除。

DOM0 事件和 DOM2 級在事件監(jiān)聽使用方式上的區(qū)別

  • DOM0事件是指直接將事件綁定在元素上,使用時(shí)直接定義elem.event=執(zhí)行內(nèi)容;在監(jiān)聽方式上因?yàn)槭侵苯咏壎ㄔ谠厣?,所以只能綁定一個(gè)事件。
  • DOM2級事件規(guī)定了事件的三個(gè)階段:捕獲、目標(biāo)、冒泡;在js代碼中使用addEventListener監(jiān)聽函數(shù)對元素新增一個(gè)事件偵聽器,可以對一個(gè)元素添加多個(gè)偵聽器;可以指定在哪個(gè)階段觸發(fā)處理程序。

attachEvent 與 addEventListener 的區(qū)別

  • 適用的瀏覽器版本不同:addEventListener用于標(biāo)準(zhǔn)主流瀏覽器;attachEvent是針對老版本的IE瀏覽器。
  • 參數(shù)數(shù)量及相應(yīng)的觸發(fā)階段不同:addEventListener有三個(gè)傳遞參數(shù),最后一個(gè)參數(shù)可以定義處理程序在捕獲/冒泡階段觸發(fā);而attachEvent只有兩個(gè)傳遞參數(shù),只能在冒泡階段觸發(fā)。
  • 第一個(gè)參數(shù)的形式不同:addEventListener第一個(gè)參數(shù)就是事件如click;而attachEvent的第一個(gè)參數(shù)需要在前面加ononclick;
  • 處理程序的作用域不同:addEventListener所觸發(fā)處理程序的作用域是元素本身,this指代的是觸發(fā)元素和target類似;而attachEvent觸發(fā)的處理程序會(huì)在全局環(huán)境下運(yùn)行,this指代的是window。
  • 在聽一個(gè)事件上綁定多個(gè)事件處理程序時(shí)執(zhí)行順序不同:addEventListener會(huì)按添加順序配合第三個(gè)參數(shù)執(zhí)行;而attachEvent的執(zhí)行順序是無序的。

IE事件冒泡和DOM2事件傳播機(jī)制

  • IE事件冒泡:事件發(fā)生在觸發(fā)元素上,從觸發(fā)元素開始,事件往其父元素傳播,類似水中冒氣泡般再一級一級往上傳播,最終到html根節(jié)點(diǎn)。
  • DOM2事件傳播機(jī)制:DOM2事件傳播分三個(gè)階段,捕獲階段、處于目標(biāo)階段、冒泡階段(注意,只能選擇捕獲或冒泡其中的一個(gè)階段來讓處理程序執(zhí)行);用戶行為或其他事件發(fā)生后,根節(jié)點(diǎn)最先知道,而后一級一級往下傳遞直到到達(dá)觸發(fā)觸發(fā)元素的身上,此為捕獲階段;事件到達(dá)目標(biāo)元素身上,此為處于目標(biāo)階段;從目標(biāo)元素身上又一層一層往上傳遞,直至到達(dá)根節(jié)點(diǎn),此為冒泡階段。

阻止事件冒泡、阻止默認(rèn)事件

  • 在想要截?cái)嗟脑毓?jié)點(diǎn)中的處理程序中添加e.stoppropagation( )讓事件停止冒泡;
  • 在目標(biāo)元素添加僅包含e.preventDeafault( )的處理程序來阻止默認(rèn)事件。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 一、問答 1. dom對象的innerText和innerHTML有什么區(qū)別? innerHTML: 也就是從對象...
    饑人谷_羅偉恩閱讀 695評論 0 2
  • 一、dom對象的innerText和innerHTML有什么區(qū)別? innerHTML返回的是從對象起始位置到終止...
    __Qiao閱讀 479評論 0 0
  • dom對象的innerText和innerHTML有什么區(qū)別? innerHTML指的是從對象的起始位置到終止位置...
    coolheadedY閱讀 577評論 0 0
  • 問答 一、dom對象的innerText和innerHTML有什么區(qū)別? innerTextinnerText是一...
    婷樓沐熙閱讀 469評論 0 0
  • 問答 1、dom對象的innerText和innerHTML有什么區(qū)別? innerText屬性①innerTex...
    鴻鵠飛天閱讀 696評論 0 1

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