DOM、事件

1.dom對象的innerText和innerHTML有什么區(qū)別凰狞?

答:innerText是獲取不帶標(biāo)簽的文本谅河,而innerHTML獲取的是帶標(biāo)簽的文本罐栈。都可以用作改寫頁面上的內(nèi)容搓蚪,innerHTML會獲取該元素所子元素的內(nèi)容像寒。一般使用innerText的多一些劝赔,這樣可以防止用戶所提交的數(shù)據(jù)中存在代碼誓焦,對頁面產(chǎn)生影響。

    <p>hello <a href="#">hunger</a></p>
<script>
    var p = document.getElementsByTagName('p')[0]
    
</script>
2.elem.children和elem.childNodes的區(qū)別着帽?

答:elem.children和elem.childNodes都是返回元素的直接子元素杂伟。區(qū)別有:

  • children只返回有標(biāo)簽的元素節(jié)點(diǎn)。
  • childNodes除了返回元素節(jié)點(diǎn)仍翰,還會返回文本節(jié)點(diǎn)赫粥,文本節(jié)點(diǎn)包括:空格、換行符等等予借。
    <div id="ct">
        <p>青青子衿越平, 悠悠我心</p>
    <p>hello <a href="#">hunger</a></p>
    </div>
<script>
    var a = document.getElementById("ct")
    console.log(a.children)
    console.log(a.childNodes)
</script>
3.查詢元素有幾種常見的方法?

答:常用的有六種方法他們分別是getElementById()灵迫、getElementsByClassName()秦叛、getElementsByTagName()、getElementByName()瀑粥、querySelector()挣跋、querySelectAll()。

  • getElementById():通過Id名稱來查詢元素
document.getElementById('ct') //查詢id為ct的元素
  • getElementsByClassName():通過Class名稱來獲取元素狞换。
document.getElementsByClassName('box')//獲取Class名稱為box的元素避咆。
  • getElementsByTagName():獲取指定標(biāo)簽的元素,返回值是一個(gè)HTMLCollection對象(類似一個(gè)數(shù)組)修噪。
document.getElementsByTagName('p')//獲取所有p標(biāo)簽內(nèi)容的一個(gè)類數(shù)組查库。
  • getElementsByName():查詢擁有Name屬性的HTML元素,比如form割按、img等膨报,返回一個(gè)NodeList格式對象,不會實(shí)時(shí)反映元素變化适荣。
document.getElementsByName('text')
  • querySelector():查詢匹配指定的CSS選擇器的元素節(jié)點(diǎn),如果有多個(gè)節(jié)點(diǎn)滿足條件院领,只返回第一項(xiàng)弛矛,IE8以上支持,現(xiàn)在很常用比然。
document.querySelector('#ct')//獲取Id為ct的元素
  • querySelectorAll():同上但返回對象是NodeList丈氓。
4.如何創(chuàng)建一個(gè)元素?如何給元素設(shè)置屬性?

答:創(chuàng)建一個(gè)元素createElement(),createTextNode()來往元素中添加文本万俗,定義屬性setAttribute()湾笛,里面?zhèn)魅雰蓚€(gè)值,第一個(gè)值為元素的屬性闰歪,第二個(gè)值為定義的值嚎研。

<body>
        <p class="a">青青子衿,悠悠我心</p>
<script>
var newP = document.createElement('p');
var newText = document.createTextNode('但為君故库倘,沉吟至今')
    newP.appendChild(newText)
    document.body.appendChild(newP)
    var a = document.querySelector('.a')
    a.setAttribute('align','center')
</script>
</body>
5.元素的添加临扮、刪除?

答:使用appendchild()在元素的末尾添加元素參數(shù)為添加進(jìn)的元素教翩,在上一題的例子中已經(jīng)使用過這個(gè)杆勇。
使用insertBefore在某個(gè)元素之前插入元素節(jié)點(diǎn),該方法有兩個(gè)參數(shù)一個(gè)是被添加的元素饱亿,另一個(gè)被替換的元素蚜退。

        <div id="ct">
            <p>青青子衿,悠悠我心</p>
        </div>
        <script>
            var div = document.getElementById('ct'),
                    newContent = document.createTextNode('但為君故彪笼,沉吟至今');
            div.insertBefore(newContent, div.firstChild);
        </script>

使用 removChild()來刪除某個(gè)元素钻注,參數(shù)是待刪除元素。
使用replaceChild()來替換某個(gè)元素杰扫,它有兩個(gè)參數(shù)一個(gè)是替換的元素队寇,另一個(gè)是被替換的元素。

6.DOM0 事件和DOM2級在事件監(jiān)聽使用方式上有什么區(qū)別章姓?

答:DOM0事件就是通過onclick寫在HTML標(biāo)簽里的事件佳遣,

<a href="#" onclick="console.log('clicked');">點(diǎn)我</a>

這種寫法的缺點(diǎn)是不利于日后的代碼維護(hù),以及一個(gè)代碼只能使用一次凡伊,沒有復(fù)用性零渐。
DOM2事件有兩種方法一個(gè)是addEventListener()和removeEventListener() 它們都返回三個(gè)參數(shù)分別是事件類型、事件處理方法和布爾值默認(rèn)為false系忙,false是冒泡階段處理诵盼,如果是ture就是在調(diào)用階段處理。

    <input id='btn' type="button" name="name" value="點(diǎn)我啊" />

    <script>
        var btn = document.querySelector("#btn")
        btn.addEventListener("click",function(){
            console.log("哈哈")
        },false)
    </script>

DOM2可以給上面代碼添加多個(gè)事件處理程序银还,對IE9以下的瀏覽器不支持风宁。

7.attachEvent與addEventListener的區(qū)別?

答:

  • addEventListener是W3C標(biāo)準(zhǔn)蛹疯,而attachEvent()不是W3C標(biāo)準(zhǔn)戒财,并只支持IE8瀏覽器以下的
  • addEventListener里面有三個(gè)參數(shù)(類型、函數(shù)捺弦、布爾值)而attachEvent只有兩個(gè)(類型饮寞、函數(shù))孝扛,只支持事件冒泡。
  • addEventListener接收的類型為click而attachEvent接收的是onclick幽崩。
  • addEventListener的移除函數(shù)方法是removeEventListener苦始,而attachEvent移除函數(shù)的方法是detachEvent。
  • addEventListener的作用域是元素本身慌申,this指的是觸發(fā)元素陌选,attachEvent的作用域是全局this指的是window。
  • addEventListener按照添加順序執(zhí)行太示,attachEvent沒有順序執(zhí)行柠贤。
8.解釋IE事件冒泡和DOM2事件傳播機(jī)制?

答:

  • IE事件冒泡是事件由第一個(gè)被觸發(fā)的元素接收类缤,然后逐級向上傳播臼勉,
  • DOM2事件傳播,事件由最外層元素接收餐弱,然后逐層向內(nèi)傳播宴霸,這個(gè)過程為捕獲階段,當(dāng)達(dá)到目標(biāo)元素時(shí)膏蚓,處于目標(biāo)階段瓢谢,然后事件由目標(biāo)元素向最外層開始傳遞,這個(gè)過程稱之為冒泡階段
9.如何阻止事件冒泡驮瞧? 如何阻止默認(rèn)事件氓扛?

答:阻止事件冒泡:e.stopPropagation()用來阻止事件傳播,事件在document冒泡階段是聽不到響應(yīng)的论笔。
使用cancelable來查詢默認(rèn)事件是否被阻止采郎,如果返回值為true,可以使用e.preventDefault()來阻止默認(rèn)事件,比如阻止a鏈接的跳轉(zhuǎn)狂魔。

代碼題

有如下代碼蒜埋,要求當(dāng)點(diǎn)擊每一個(gè)元素li時(shí)控制臺展示該元素的文本內(nèi)容。不考慮兼容
<ul class="ct">
    <li>這里是</li>
    <li>饑人谷</li>
    <li>前端6班</li>
</ul>
<script>
    var ct = document.querySelector(".ct")
    ct.addEventListener("click",function(e){
        console.log(e.target.innerText)
    },false)
</script>
方法2
<ul class="ct">
    <li>這里是</li>
    <li>饑人谷</li>
    <li>前端6班</li>
</ul>
<script>
    var ct = document.getElementsByClassName("ct")[0].getElementsByTagName("li")
    for (var i= 0;i<ct.length;i++){
        ct[i].addEventListener("click",function(){
            console.log(this.innerText)
        })
    }

</script>

代碼2
代碼3
代碼4
代碼5

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末最楷,一起剝皮案震驚了整個(gè)濱河市整份,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌籽孙,老刑警劉巖烈评,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異犯建,居然都是意外死亡础倍,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進(jìn)店門胎挎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來沟启,“玉大人,你說我怎么就攤上這事犹菇〉录#” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵揭芍,是天一觀的道長胳搞。 經(jīng)常有香客問我,道長称杨,這世上最難降的妖魔是什么肌毅? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮姑原,結(jié)果婚禮上悬而,老公的妹妹穿的比我還像新娘。我一直安慰自己锭汛,他們只是感情好笨奠,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著唤殴,像睡著了一般般婆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上朵逝,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天蔚袍,我揣著相機(jī)與錄音,去河邊找鬼配名。 笑死啤咽,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的段誊。 我是一名探鬼主播闰蚕,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼连舍!你這毒婦竟也來了没陡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤索赏,失蹤者是張志新(化名)和其女友劉穎盼玄,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體潜腻,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡埃儿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了融涣。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片童番。...
    茶點(diǎn)故事閱讀 38,064評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡精钮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出剃斧,到底是詐尸還是另有隱情轨香,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布幼东,位于F島的核電站臂容,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏根蟹。R本人自食惡果不足惜脓杉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望简逮。 院中可真熱鬧球散,春花似錦、人聲如沸买决。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽督赤。三九已至嘁灯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間躲舌,已是汗流浹背丑婿。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留没卸,地道東北人羹奉。 一個(gè)月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像约计,于是被迫代替她去往敵國和親诀拭。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容