題目1: dom對象的innerText和innerHTML有什么區(qū)別哄啄?
- innerText :返回元素內(nèi)包含的文本內(nèi)容誓禁,在多層次的時候會按照元素由淺到深的順序拼接其內(nèi)容
- innerHTML:返回元素的HTML結構吻谋,在寫入的時候也會自動構建DOM
<div id="test">
<p>
123
<span>456</span>
</p>
</div>
var test = document.getElementById("test");
console.log(test.innerText)//"123 456"
console.log(test.innerHTML)
/*
<p>
123
<span>456</span>
</p>
*/
題目2: elem.children和elem.childNodes的區(qū)別?
- elem.children:子元素列表(HTMLCollection)
- elem.childNodes:子元素列表(NodeList)一個節(jié)點的集合现横,既可以包含元素和其他節(jié)點(eg:注釋節(jié)點漓拾、文本節(jié)點、注:空格換行為text).
題目3:查詢元素有幾種常見的方法戒祠?ES5的元素選擇方法是什么?
- getElementById方法返回匹配指定ID屬性的元素節(jié)點骇两。如果沒有發(fā)現(xiàn)匹配的節(jié)點,則返回null姜盈。這也是獲取一個元素最快的方法.
- getElementsByClassName方法返回一個類似數(shù)組的對象(HTMLCollection類型的對象)低千,包括了所有class名字符合指定條件的元素(搜索范圍包括本身)
- getElementsByTagName方法返回所有指定標簽的元素(搜索范圍包括本身)。返回值是一個HTMLCollection對象
- getElementsByName方法用于選擇擁有name屬性的HTML元素
- ES5方法:
- querySelector();如果有多個節(jié)點滿足匹配條件馏颂,則返回第一個匹配的節(jié)點示血。如果沒有發(fā)現(xiàn)匹配的節(jié)點,則返回null救拉。
- querySelectorAll();
querySelectorAll方法返回匹配指定的CSS選擇器的所有節(jié)點难审,返回的是NodeList類型的對象。NodeList對象不是動態(tài)集合亿絮,所以元素節(jié)點的變化無法實時反映在返回結果中告喊。
題目4:如何創(chuàng)建一個元素?如何給元素設置屬性派昧?如何刪除屬性
- 創(chuàng)建元素:
- createElement()方法用來生成HTML元素節(jié)點
- createTextNode()方法用來生成文本節(jié)點黔姜,參數(shù)為所要生成的文本節(jié)點的內(nèi)容
-
createDocumentFragment()方法生成一個DocumentFragment對象。DocumentFragment對象是一個存在于內(nèi)存的DOM片段蒂萎,但是不屬于當前文檔秆吵,常常用來生成較復雜的DOM結構,然后插入當前文檔五慈。
這樣做的好處在于纳寂,因為DocumentFragment不屬于當前文檔实苞,對它的任何改動,都不會引發(fā)網(wǎng)頁的重新渲染烈疚,比直接修改當前文檔的DOM有更好的性能表現(xiàn)黔牵。
- 元素設置屬性:
- createAttribute()方法生成一個新的屬性對象節(jié)點,并返回它爷肝。
attribute = document.createAttribute(name);
createAttribute方法的參數(shù)name猾浦,是屬性的名稱。
- setAttribute()方法用于設置元素屬性灯抛。
var node = document.getElementById("div1"); node.setAttribute("my_attrib", "newVal");
等同于
var node = document.getElementById("div1"); var a = document.createAttribute("my_attrib"); a.value = "newVal"; node.setAttributeNode(a);
- 刪除屬性
romoveAttribute())用于刪除元素屬性
node.removeAttribute('id');
題目5:如何給頁面元素添加子元素金赦?如何刪除頁面元素下的子元素?
- 給頁面元素添加子元素:
- appendChild()在元素末尾添加元素.
var newDiv = document.createElement("div"); var newContent = document.createTextNode("Hello"); newDiv.appendChild(newContent);
- insertBefore()方法在某個元素之前插入元素
var newDiv = document.createElement("div"); var newContent = document.createTextNode("Hello"); newDiv.insertBefore(newContent, newDiv.firstChild);
- 刪除元素使用removeChild()方法即可
parentNode.removeChild(childNode);
題目6: element.classList有哪些方法?如何判斷一個元素的 class 列表中是包含某個 class对嚼?如何添加一個class夹抗?如何刪除一個class?
- Element.classList 是一個只讀屬性,返回一個元素的類屬性的實時 DOMTokenList集合纵竖。
- 方法
- add( String [, String] )
添加指定的類值漠烧。如果這些類已經(jīng)存在于元素的屬性中,那么它們將被忽略靡砌。 - remove( String [,String] )
刪除指定的類值已脓。 - item ( Number )
按集合中的索引返回類值。 - toggle ( String [, force] )
當只有一個參數(shù)時:切換 class value; 即如果類存在通殃,則刪除它并返回false度液,如果不存在,則添加它并返回true画舌。
當存在第二個參數(shù)時:如果第二個參數(shù)的計算結果為true堕担,則添加指定的類值,如果計算結果為false曲聂,則刪除它 - contains( String )
檢查元素的類屬性中是否存在指定的類值霹购。 - 是否包含class,添加class,刪除class;
<div class="test abc ok " id="abc"></div> <script> var ediv = document.getElementById("abc"); //********************是否包含某個 class************ console.log(ediv.classList.contains("test"))//true; //********************添加一個class******************** ediv.classList.add("okoko") //********************刪除一個class******************** ediv.classList.remove("abc") </script>
題目7: 如何選中如下代碼所有的li元素句葵? 如何選中btn元素厕鹃?
<div class="mod-tabs">
<ul>
<li>list1</li>
<li>list2</li>
<li>list3</li>
</ul>
<button class="btn">點我</button>
</div>
<script> var modTabs = document.querySelector(".mod-tabs"); var lilist = modTabs.getElementsByTagName("li");//選中所有的li var btn = modTabs.querySelector(".btn");//選中div console.log(lilist); console.log(btn); </script>