DOM基礎知識(Node對象、Element對象)


5、Node對象

u  遍歷節點

u 父節點

.parentNode - 獲取父節點—> 元素節點或文檔節點

.parentElement - 獲取父元素節點—> 元素節點

u    子節點

.childNodes – 獲取所有子節點;

.firstChild – 獲取第一個子節點;     .lastChild – 獲取最后一個子節點

u    兄弟節點

.previousSibling - 上一個兄弟節點;    .nextSibling - 下一個兄弟節點

L 空白節點問題:

                                                                                                                       

概念:空白節點,實際上就是一個空的文本節點

原因: 編寫HTML代碼時,輸入換行符,瀏覽器解析HTML頁面為DOM結構時,自動添加空白節點    ---獲取子節點及兄弟節點的屬性不能正常使用

注:IE8及以下版本的瀏覽器不存在空白節點問題

  • 解決方案

1. 棄用獲取子節點和兄弟節點的屬性;改用getElementsByTagName( ) 方法

  從父級根據標簽名得到所有子級,選[0];   自動把空白節點去掉

  1. 使用原本的子節點屬性,人為進行判斷,進行重構
  • 封裝方法:

 

l 插入節點

.appendChild()

作用:將child節點插入到parent父節點的子節點列表的最后面

.insertBefore(new,current)

作用:將newChild插入到parent父節點下currentChild子節點的前面

注意 - 沒有insertAfter( )方法

  • 自定義---- insertAfter(newChild, currentChild) 方法

 

                         function insertAfter(parent, newChild, currentChild){

                                  var next = currentChild.nextSibling;

                                  if(next.nodeType == 3){

                                      next = next.nextSibling;

                                  }

                         Parent.insertBefore(newChild,next);}

如果調用該方法時,目標節點為 null 值或不存在的話;等價於調用 appendChild( ) 方法

                                  }

l 刪除節點 – .removeChild()

l 替換節點 –.replaceChild(newChild,oldChild)

newChild - 創建新的,從頁面獲取;           parent和oldChild之間必須是父子關系

u   復制節點 - .cloneNode(boolean)

boolean類型的參數:是否復制后代節點     true:表示賦值; false:(默認值)表示不復制

* 返回值 - 表示被復制新的節點

注:如果復制的節點具有id屬性的話,在復制完成之后,修改id屬性值

6、Element對象

u  概念:

 

* 使用<節點>概念解析HTML

被解析為元素節點、屬性節點和文本節點;三者相互獨立(文本、元素節點是父子關系)

* 使用<元素>概念解析HTML

被解析為元素,屬性和文本是元素的一部分

注:元素節點和元素都代表HTML頁面中的標簽

DOM查詢的六個方法返回的既是元素節點(Node對象),又是元素(Element對象)

u 遍歷元素

² 獲取父元素

 .parentElement

² 獲取子元素  

.children 獲取所有子元素的集合

.firstElementChild獲取第一個子元素        .lastElementChild獲取最后一個子元素

² 獲取兄弟元素

 .previousElementSibling  獲取指定節點的前一個兄弟節點。

 .nextElementSibling  獲取指定節點的后一個兄弟節點。

注:所有獲取子元素和兄弟元素的屬性,在 IE8及以下版本的瀏覽器不支持

 * 人為提供瀏覽器的兼容解決方案

u  操作屬性

² 獲取屬性   .getAttribute(屬性名)

如果獲取的屬性名根本不存在,結果為null

如果屬性名存在,返回屬性的值,轉換為boolean值 true

如果屬性名不存在,返回null,轉換為boolean值 false

² 設置屬性   .setAttribute(屬性名, 屬性值)

如果屬性名已存在的話 - 修改指定屬性名的值

如果屬性名不存在的話 - 新增屬性(同時設置屬性名和屬性值)                      */

² 刪除屬性   .removeAttribute(屬性名)

效果: 將屬性名和屬性值一並刪除

² 判斷是否含有屬性   .hasAttribute(屬性名)   有----true;  沒有----false

* hasAttribute( )方法:

屬於Element對象; 作用:判斷指定標簽是否含有【指定屬性】

* hasAttributes( )方法:

屬於Node對象;作用:判斷指定標簽是否包含屬性

l  文本操作

  • Ø 通過Node 對象的節點方式進行操作

* 文本節點一定是元素節點的子節點 - 獲取指定的文本節點

* 通過 nodeValue 屬性可以獲取或設置文本節點的文本內容

利用 Node 方式操作文本(文本節點)

        * 通過獲取子節點的方式得到文本節點

        * 通過 appendChild() 方法添加文本節點

        * 通過 removeChild() 方法刪除文本節點

                       文本節點的節點圖

 

文本節點具有 nodeName、nodeType和nodeValue

nodeType - 用於判斷當前是否是文本節點(3)

nodeValue - 用於獲取或設置文本節點的文本內

【當元素節點的子節點為文本節點時; 不存在空白節點的問題】

  • Ø textContent 屬性

作用:獲取指定元素中所有的文本內容(包含所有后代節點的文本內容);

【注:不支持IE8及以下版本;結果不報錯,為 undefined 轉換為boolean類型 false】

  • innerText屬性

【支持IE8及以下版本瀏覽器[專有]屬性; IE9以上及其他(Chrome和火狐)新版本都兼容

  獲取文本的兼容問題

        function getText(elem){

         var text;

         if(elem.textContent){ 

         text = elem.textContent; 

         }else{

         text = elem.innerText;

         }

             return text;

         }

  • innerHTML屬性

作用:獲取或設置指定標簽的所有HTML代碼[有什么輸出什么]

注意:使用innerHTML屬性的安全性很低(可能接收一些惡意代碼)

解決:使用innerHTML屬性時,對應的值不能是用戶輸入內容

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM