題目1: dom對象的innerText和innerHTML有什么區(qū)別讹语?
- 對于多行或有嵌套的元素亲轨,innerHTML會獲取從開始標簽到結(jié)束標簽中的所有內(nèi)容赁严,包括子元素標簽,返回整個HTML結(jié)構(gòu)高职;innerText會獲取從開始標簽到結(jié)束標簽中的所有內(nèi)容,但不包括子元素標簽辞州,并把內(nèi)容拼湊在一行怔锌;innerHTML是w3c標準,innerText只適用于IE瀏覽器孙技。
題目2: elem.children和elem.childNodes的區(qū)別产禾?
- 相同點:elem.children和elem.childNodes都可以以類數(shù)組的形式返回子元素節(jié)點;
- 區(qū)別1:elem.children返回的類數(shù)組是HTMLCollection牵啦,elem.childNodes返回的類數(shù)組是NodeList亚情;
- 區(qū)別2:elem.children只包含元素節(jié)點,elem.childNodes包含元素節(jié)點哈雏、文本節(jié)點楞件、注釋節(jié)點等。
題目3:查詢元素有幾種常見的方法裳瘪?ES5的元素選擇方法是什么?
- getElementById 返回匹配指定ID屬性的元素節(jié)點土浸。
- getElementsByClassName 返回一個類似數(shù)組的對象(HTMLCollection類型的對象),包括了所有class名- 字符合指定條件的元素(搜索范圍包括本身)彭羹,元素的變化實時反映在返回結(jié)果中
- 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é)點的變化無法實時反映在返回結(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的內(nèi)容';
body.appendChild(divEle);
//把pEle插入到divEle中的第一個子元素
var pEle = document.createElement("p");
pEle.innerHTML = 'p的內(nèi)容--pEle';
divEle.insertBefore(pEle, divEle.firstChild);
//把divEle中的第一個子元素替換成pEleNew
var pEleNew = document.createElement('p');
pEleNew.innerHTML = 'p的內(nèi)容--pEleNew';
divEle.replaceChild(pEleNew, divEle.firstChild);
//刪除divEle中的第一個子元素乌庶,即pEleNew
divEle.removeChild(divEle.firstChild);
題目6: element.classList有哪些方法?如何判斷一個元素的 class 列表中是包含某個 class契耿?如何添加一個class瞒大?如何刪除一個class?
element.classList返回屬性的類名,有這么幾個屬性和方法:
1.length:返回元素類名的個數(shù)搪桂,只讀透敌;
2.item():支持一個參數(shù),為類名的索引踢械,返回對應的類名酗电;
3.add():接受一個class名字符串作為參數(shù),把該class名添加到元素上内列,若已存在撵术,則忽略;
4.remove() :接受一個class名字符串作為參數(shù)话瞧,把該class從元素上移除嫩与;
5.contains():接受一個class名字符串作為參數(shù),驗證元素的class列表中是否包含該class交排,返回布爾值划滋;
6.toggle():接受2個參數(shù),第一個為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);