1. 程式人生 > >從零開始的全棧工程師——js篇2.17(屬性和節點獲取)

從零開始的全棧工程師——js篇2.17(屬性和節點獲取)

DOM

一、節點樹狀圖

Document>documentElement>body>tagname

二、常用的節點型別

元素節點(標籤)

文字節點(文字節點)

屬性節點(標籤裡的屬性)

 

三、document有個屬性叫nodeType 返回的是數字

1代表元素節點  2代表屬性節點  3代表文字節點

 

四、節點的獲取

Document.getElementById()   通過id名獲取節點

Document.getElementsByClassName()  通過class名獲取節點

Document.getElementsByTagName()  直接獲取標籤

Document.querySelector()

Document.querySelectorAll()

 

1.屬性節點的獲取

nodeType <--判斷節點型別
元素.attributes <--獲取元素身上所有屬性構成的集合
元素.getAttribute(“class”) <--獲取元素身上指定的屬性的屬性值
元素.setAttribute(“class”.“class”)<--給元素新增一個屬性和屬性值 可以修改存在的屬性
元素.removeAttribute(“class”)<--刪除元素中的一個屬性

 

2.獲取元素的子節點

元素.childNodes <--獲取元素身上的所有子節點 包括文字節點
元素.children <--獲取元素身上的所有子節點 不包括文字節點
父元素.firstElementChild <--獲取元素裡第一個子節點
父元素.lastElementChild <--獲取元素裡最後一個子節點
元素.parentNode 獲取一個元素的父節點 <--可以寫多個.parentNode 來獲取父級的父級 直到null

 

3.獲取父節點

建立子節點:var span = document.creatElement(“span”) <--建立一個節點賦值給span
元素.appendChild(span) <--在元素裡面的最後一個子節點後面新增一個span
父元素.insertBefore(新元素,div.children[0]) <--在父元素的某一個子節點前新增一個新元素
元素.removeChild(元素.children[0]) <--在父元素中刪除指定的子節點

元素.innerHTML=“內容”  <-- 給元素新增內容

 

 

相容性

元素沒有子節點,ie低版本會讀取不到,而標準瀏覽器會。

因為標準瀏覽器會把文字節點當作子節點,而ie6-8不會。

超連結a的屬性href分析

<a href=””> 點選會重新整理頁面,相當於向後臺傳送一次請求。

<a href=”#s”> 錨點跳轉 跳轉到某一個id叫s的位置上

<a href=”javascript:;”> 取消重新整理頁面的功能

 

 

 

拓展:

字串拼接和Dom建立都是渲染的方式

1)字串拼接

優點 簡單,層次感強,可以處理大量資料

缺點:字串拼接會影響到原有子元素的事件

2)Dom建立

優點:是一個獨立的個體,不會影響到原有的元素

缺點:處理資料量過大會比較麻煩,會造成DOM迴流。

 

Dom迴流

頁面渲染時,我們對html結構簡單的增刪查改時,瀏覽器會對所有的dom進行重新排列,這就是Dom迴流,嚴重影響瀏覽器的效能。

 

提升頁面效能優化

  1. 多采用雪碧圖
  2. 阻止超連結的預設行為
  3. 減少Dom迴流
  4. 減少向伺服器請求的次數