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