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]來使用,在document和element下使用; -
getElementsByTagName:通過標(biāo)簽名來選擇元素,返回一個(gè)儲(chǔ)存duiy對應(yīng)類名的類數(shù)組對象,要用arr[i]來使用,在document和enement下使用; -
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ù)需要在前面加on如onclick; - 處理程序的作用域不同:
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)事件。