進(jìn)階8 DOM操作

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

  • innerText 屬性可以過濾掉標(biāo)簽,直接獲取文本元素,在多層次的時(shí)候會(huì)按照元素由淺到深的順序拼接其內(nèi)容。
  • innerHTML 屬性和 innerText 類似,但是不是返回元素的文本內(nèi)容,而是返回元素的HTML結(jié)構(gòu),在寫入的時(shí)候也會(huì)自動(dòng)構(gòu)建DOM。

2: elem.children和elem.childNodes的區(qū)別?

3:查詢元素有幾種常見的方法?ES5的元素選擇方法是什么?

常見的有:

  • getElementById() 返回匹配指定ID屬性的元素節(jié)點(diǎn)
    -getElementsByClassName() 返回class名字符合指定條件的元素
    -getElementsByTageName() 返回所有指定標(biāo)簽的元素
    ( excluding the element itself 搜索范圍不包括本身)
    -getElementsByName() 返回所有擁有name屬性的HTML元素,比如form、img、frame、embed和object

ES5的元素選擇方法有:

  • querySelector() 返回匹配指定的CSS選擇器的元素節(jié)點(diǎn),需要注意兩點(diǎn):
    • 如果有多個(gè)節(jié)點(diǎn)滿足匹配條件,則返回第一個(gè)匹配的節(jié)點(diǎn)
    • querySelector方法無法選中CSS偽元素
  • querySelectorAll() 返回匹配指定的CSS選擇器的所有節(jié)點(diǎn)

4:如何創(chuàng)建一個(gè)元素?如何給元素設(shè)置屬性?如何刪除屬性

如何創(chuàng)建元素

  • createElement() 用來生成HTML元素節(jié)點(diǎn),參數(shù)為元素的標(biāo)簽名。
  • createTextNode() 用來生成文本節(jié)點(diǎn),參數(shù)為所要生成的文本節(jié)點(diǎn)的內(nèi)容。
  • createDocumentFragment() 生成一個(gè)DocumentFragment對象,其存在于內(nèi)存的DOM片段,但是不屬于當(dāng)前文檔,常常用來生成較復(fù)雜的DOM結(jié)構(gòu),然后插入當(dāng)前文檔。

如何給元素設(shè)置屬性

有兩種方法:

  • 一種是使用 creatAttribute() 方法生成一個(gè)新的屬性對象,然后賦值,然后設(shè)置給相應(yīng)的節(jié)點(diǎn)。
var node = document.getElementById("div1");
var a = document.createAttribute("my_attrib");
a.value = "newVal";
node.setAttributeNode(a);
  • 直接使用 setAttribute()方法 ,傳入兩個(gè)參數(shù),第一個(gè)是屬性名,第二個(gè)是屬性值,推薦這種方法
var node = document.getElementById("div1");
node.setAttribute("my_attrib", "newVal");

如何刪除屬性

使用removeAttribute(), 用于刪除元素屬性。

node.removeAttribute('id');

5:如何給頁面元素添加子元素?如何刪除頁面元素下的子元素?

如何給頁面元素添加子元素

  • appendChild() 在元素末尾添加元素,如下所示:給 ct 下面添加子元素 img
  var ct = document.querySelector('#ct')
  var node = document.createElement('img')
  ct.appendChild(node)
  • insertBefore() 在某個(gè)元素之前插入元素,如下所示:在ct內(nèi)的最后一個(gè)子元素之前插入img子元素
  var ct = document.querySelector('#ct')
  var node = document.createElement('img')
  ct.insertBefore(node, ct.lastChild)

如何刪除頁面元素下的子元素

removeChild() 方法可從子節(jié)點(diǎn)列表中刪除某個(gè)節(jié)點(diǎn)。
如刪除成功,此方法可返回被刪除的節(jié)點(diǎn),如失敗,則返回 NULL。
如下所示:刪除 ct 下的 div 子元素節(jié)點(diǎn),注意這里只能刪除單個(gè)節(jié)點(diǎn),是 node,不是 nodes。

  var ct = document.querySelector('#ct')
  var node = document.querySelector('#ct div')
  ct.removeChild(node)

6: element.classList有哪些方法?如何判斷一個(gè)元素的 class 列表中是包含某個(gè) class?如何添加一個(gè)class?如何刪除一個(gè)class?

參數(shù)為class類名字符串

  • element.classList.add() //新增 class,如果已經(jīng)存在,則忽略, 可添加多個(gè)類 add('class1', 'class2')
  • element.classList.remove() //刪除 class,可刪除多個(gè)類 remove('class1', 'class2')
  • element.classList.toggle()
    新增/刪除切換,只有一個(gè)參數(shù)時(shí),類存在,則刪除它并返回false,如果不存在,則添加它并返回true。當(dāng)存在第二個(gè)參數(shù)時(shí):如果第二個(gè)參數(shù)的計(jì)算結(jié)果為true,則添加指定的類值,如果計(jì)算結(jié)果為false,則刪除它。
  • element.classList.contains() // 判斷是否擁有某個(gè) class,返回布爾值

element.classList.item ( Number ) 參數(shù)為索引值
按集合中的索引返回類值。

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>

<scirpt>
  var li = document.querySelectorAll('.mod-tabs ul li')
  // document.getElementsByTagName('li')
  var btn = document.querySelector('.btn')
  // document.getElementsByClassName('btn')[0]
</scirpt>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 題目1: dom對象的innerText和innerHTML有什么區(qū)別? innerText是一個(gè)可寫屬性,返回元...
    我七閱讀 436評論 0 0
  • 1.dom對象的innerText和innerHTML有什么區(qū)別? innerText是一個(gè)可寫屬性,返回元素內(nèi)包...
    24_Magic閱讀 158評論 0 1
  • 1. dom對象的innerText和innerHTML有什么區(qū)別? innerText:獲取元素內(nèi)的的所有文本內(nèi)...
    饑人谷_哈嚕嚕閱讀 263評論 0 0
  • 隨著全民健身理念的普及開來,越來越多的人都參與到健身大軍中,與此同時(shí)各種健身類可穿戴設(shè)備也越來越受大家追捧。其中,...
    搜搜時(shí)尚閱讀 22,724評論 2 0
  • 是怎樣的一種悲傷 從受傷的心最深處扒開 我看見你 ?? Constellation of Tatyana
    幺二二閱讀 355評論 0 0