題目1: dom對(duì)象的innerText和innerHTML有什么區(qū)別?
- 對(duì)于多行或有嵌套的元素,innerHTML會(huì)獲取從開(kāi)始標(biāo)簽到結(jié)束標(biāo)簽中的所有內(nèi)容,包括子元素標(biāo)簽,返回整個(gè)HTML結(jié)構(gòu);innerText會(huì)獲取從開(kāi)始標(biāo)簽到結(jié)束標(biāo)簽中的所有內(nèi)容,但不包括子元素標(biāo)簽,并把內(nèi)容拼湊在一行;innerHTML是w3c標(biāo)準(zhǔn),innerText只適用于IE瀏覽器。
題目2: elem.children和elem.childNodes的區(qū)別?
- 相同點(diǎn):elem.children和elem.childNodes都可以以類數(shù)組的形式返回子元素節(jié)點(diǎn);
- 區(qū)別1:elem.children返回的類數(shù)組是HTMLCollection,elem.childNodes返回的類數(shù)組是NodeList;
- 區(qū)別2:elem.children只包含元素節(jié)點(diǎn),elem.childNodes包含元素節(jié)點(diǎn)、文本節(jié)點(diǎn)、注釋節(jié)點(diǎn)等。
題目3:查詢?cè)赜袔追N常見(jiàn)的方法?ES5的元素選擇方法是什么?
- getElementById 返回匹配指定ID屬性的元素節(jié)點(diǎn)。
- getElementsByClassName 返回一個(gè)類似數(shù)組的對(duì)象(HTMLCollection類型的對(duì)象),包括了所有class名- 字符合指定條件的元素(搜索范圍包括本身),元素的變化實(shí)時(shí)反映在返回結(jié)果中
- getElementsByTagName 返回所有指定標(biāo)簽的元素(搜索范圍包括本身)
- getElementsByName 用于選擇擁有name屬性的HTML元素,比如form、img、frame、embed和object,返回一個(gè)NodeList格式的對(duì)象,不會(huì)實(shí)時(shí)反映元素的變化。
ES5選擇方法:
- querySelector 返回匹配指定的CSS選擇器的元素節(jié)點(diǎn)。如果有多個(gè)節(jié)點(diǎn)滿足匹配條件,則返回第一個(gè)匹配的節(jié)點(diǎn)。如果沒(méi)有發(fā)現(xiàn)匹配的節(jié)點(diǎn),則返回null。
- querySelectorAll 返回匹配指定的CSS選擇器的所有節(jié)點(diǎn),返回的是NodeList類型的對(duì)象。NodeList對(duì)象不是動(dòng)態(tài)集合,所以元素節(jié)點(diǎn)的變化無(wú)法實(shí)時(shí)反映在返回結(jié)果中。
題目4:如何創(chuàng)建一個(gè)元素?如何給元素設(shè)置屬性?如何刪除屬性
//創(chuàng)建元素
var divEle = document.createElement("div");
//設(shè)置刪除屬性
divEle.setAttribute('myClass', 'myClassVal');
var myClass = divEle.getAttribute('myClass');
console.log('myClass', myClass); //myClass myClassVal
divEle.removeAttribute('myClass');
myClass = divEle.getAttribute('myClass');
console.log('myClass', myClass); //myClass null
題目5:如何給頁(yè)面元素添加子元素?如何刪除頁(yè)面元素下的子元素?
var body = document.getElementsByTagName('body')[0];
//把divEle插入到body
var divEle = document.createElement("div");
divEle.innerHTML = 'div的內(nèi)容';
body.appendChild(divEle);
//把pEle插入到divEle中的第一個(gè)子元素
var pEle = document.createElement("p");
pEle.innerHTML = 'p的內(nèi)容--pEle';
divEle.insertBefore(pEle, divEle.firstChild);
//把divEle中的第一個(gè)子元素替換成pEleNew
var pEleNew = document.createElement('p');
pEleNew.innerHTML = 'p的內(nèi)容--pEleNew';
divEle.replaceChild(pEleNew, divEle.firstChild);
//刪除divEle中的第一個(gè)子元素,即pEleNew
divEle.removeChild(divEle.firstChild);
題目6: element.classList有哪些方法?如何判斷一個(gè)元素的 class 列表中是包含某個(gè) class?如何添加一個(gè)class?如何刪除一個(gè)class?
element.classList返回屬性的類名,有這么幾個(gè)屬性和方法:
1.length:返回元素類名的個(gè)數(shù),只讀;
2.item():支持一個(gè)參數(shù),為類名的索引,返回對(duì)應(yīng)的類名;
3.add():接受一個(gè)class名字符串作為參數(shù),把該class名添加到元素上,若已存在,則忽略;
4.remove() :接受一個(gè)class名字符串作為參數(shù),把該class從元素上移除;
5.contains():接受一個(gè)class名字符串作為參數(shù),驗(yàn)證元素的class列表中是否包含該class,返回布爾值;
6.toggle():接受2個(gè)參數(shù),第一個(gè)為class名字符串,第二個(gè)為布爾值,如果為true表示添加該class,如果為false則表示移除該class,并返回該Boolean值。
var div = document.createElement('div');
div.setAttribute('class', 'foo bar');
var body = document.getElementsByTagName('body')[0];
body.appendChild(div);
//判斷class中是否包含foo
console.log(div.classList.contains("foo")); //true
//添加和刪除一個(gè)class
div.classList.add("anotherclass");
div.classList.remove("foo");
題目7: 如何選中如下代碼所有的li元素? 如何選中btn元素?
<div class="mod-tabs">
<ul>
<li>list1</li>
<li>list2</li>
<li>list3</li>
</ul>
<button class="btn">點(diǎn)我</button>
</div>
//方式1:
var liArr = document.getElementsByTagName('li');
console.log(liArr);
var btn = document.getElementsByClassName('btn');
console.log(btn);
//方式2:
liArr = document.querySelectorAll('li');
console.log(liArr);
btn = document.querySelector('.btn');
console.log(btn);