js element類型的屬性和方法整理


Element類型

除了Document類型,我們Web編程中最常用的類型就是Element類型啦.Element 類型用於表現XML或HTML元素,提供了對元素標簽名,子節點,特性的訪問

 

特征

  • nodeType值為1
  • nodeName為元素標簽名
  • nodeValue為null
  • parentNode可能是Document或Element
  • 子節點可能是Element,Text,Comment,ProcessingInstruction,CDATASection,EntityReference

其中nodeName和tagName屬性返回相同的值,推薦使用tagName,則表義更清晰,值得注意的是返回值大小寫的問題,由於HTML中為答謝,而XML/XHTML則會與源代碼保持一致,所以比較時要統一大小寫形式.

 

HTML元素

HTML元素都由HTMLElement類型表示,不直接通過該類型,也是通過它的子類型表示.HTMLElement類型繼承自Element並且添加了一些屬性如下:

  • id 元素在文檔中的唯一標識符
  • title 元素的附加說明信息,一般為工具提示條顯示
  • lang 元素內容的語言代碼,很少使用
  • dir 語言方向,ltr為從左到右,rtl則相反
  • className 與元素class的特性對應,沒有設置為class則是因為class為ECMAScript的保留字

注意以上屬性的修改並不是所有都會在頁面中直觀的表現出來,id和lang修改對用戶來說是不可見的(假設沒有css樣式),對title的修改則只會在鼠標移動到元素上時才會顯示出來(工具提示條),dir的修改則會在屬性重寫的那一刻立刻影響頁面中的文本,對className的修改則與是否關聯了不同的CSS樣式有關.

 

特性

HTML元素每個元素都有一個或多個特性,操作特性的DOM方法如下有三個:

  • getAttribute()
  • setAttribute()
  • removeAttribute()

這三個方法可以針對任何特性使用,包括自定義特性.但是只有公認的特性才會添加到DOM元素屬性上,自定義的特性通常是不存在的(undefined),當然這里又要注意我們的”好朋友”IE啦,它會為自定義特性創建屬性.

辦公資源網址導航 https://www.wode007.com

特殊特性

主要針對getAttribute()方法講述一下特殊情況.

有兩類特殊特性,有對應的屬性名,但值與getAttribute()返回的值並不相同

  • style,通過getAttribute()訪問會返回CSS文本,而通過屬性訪問返回一個對象
  • onclick這樣的事件處理程序,通過getAttribute()訪問會返回相應代碼的字符串.而屬性訪問時,則會返回一個JavaScript函數(未指定則為null)

故通常只有取得自定義特性值的情況下,才會使用getAttribute()方法.

注意!:我們的”老朋友”IE7及以前版本中,getAttribute()方法訪問上述兩個特殊特性時,返回的值與屬性的值相同.即getAttribute("style")返回一個對象,getAttribute("onclick")返回一個函數.

 

設置特性

這里主要講解下setAttribute()方法,這和getAttribute()相對應.這個方法接受兩個參數,要設置的特性名和值,如果特性存在則將值進行替換;不存在則創建並設置相應的值.
值得注意的是,設置特性名會轉換為小寫.而且直接給DOM元素添加一個自定義的屬性並不會讓這個屬性成為元素的特性.

1 div.mycolor="red";
2 div.getAttribute("mycolor"); //這里返回null(IE除外)

 

 

 

移除特性

removeAttribute()方法用於徹底刪除元素特性,調用該方法會清除特性的值並完全刪除特性.
注意!:IE6及以前版本不支持該方法.

 

attributes屬性

Element類型是使用attributes屬性的唯一一個DOM節點類型.在該屬性中包含一個NamedNodeMap,與NodeList類似,也是”動態”集合.元素每一個特性都由一個Attr節點表示,每個節點都保存在NamedNodeMap對象中.相關方法如下:

  • getNamedItem(name)返回nodeName屬性等於name的節點
  • removeNamedItem(name)從列表移除nodeName等於name的節點
  • setNamedItem(node)向列表添加節點,以節點的nodeName屬性為索引
  • item(pos)返回處於數字pos位置處的節點

在該屬性中有一系列的節點,每個節點的nodeName就是特性的名稱,nodeValue就是特性的值.要取得元素的id特性,可以使用attributes.getNamedItem("id").nodeValue
等同於attributes["id"].nodeValue

調用removeNamedItem()與在元素上調用removeAttribute()效果相同.

setNamedItem()是一個很不常用的方法,該方法可以為元素添加一個新特性,此外需要為它傳入一個特性節點.

注意!:IE7及更早版本會返回HTML元素中所有可能的特性,包括沒指定的特性.
針對低版本改進:每個特性節點都有一個名為specified的屬性,如果為true則意味着要么HTML中指定了相應特性,要么通過setAttribute()設置了該特性,在IE中未設置過的特性都為false,其他瀏覽器則不會為這類特性生成對應特性節點.

 

創建元素

document.createElement()方法就可創建新元素.
該方法接受一個參數,就是元素標簽名,這個標簽名在HTML下不區分大小寫,XML中則會區分大小寫.

在創建新元素的同時,新元素也設置了ownerDocument屬性,此時,還可以操作元素特性,為它添加更多的子節點.
在設置完特性后,由於未添加到文檔樹,所以一切特性都不會影響瀏覽器的顯示.我們可以通過之前講到的appendChild(),insertBefore(),replaceChild()方法來進行相應的操作.
一旦添加到文檔樹,則瀏覽器會立刻呈現該元素.此后我們的修改都會反應到瀏覽器中.
注意!(常不考慮):在IE中我們可以通過另一種方式進行創建

document.createElement("<div id=\"myNewDiv\" class=\"box\"></div>");

 

 

這個方式可以避開IE7及更早版本中動態創建元素的某些問題.(不能設置動態創建的iframe元素的name特性;不能通過表單的reset()方法重設動態創建的input元素;動態創建的type特性值為”reset”的button元素重設不了表單;動態創建的一批name相同的單選按鈕彼此毫無關系)

元素子節點
除了IE,其他瀏覽器解析代碼時會解析空白符為文本節點.我們可以通過nodeType屬性的檢查來過濾掉它們

 


免責聲明!

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



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