DOM節(jié)點(diǎn)和五個(gè)常見的DOM方法

一 什么的DOM

簡單地說,DOM就是一套對文檔內(nèi)容進(jìn)行抽象和概念化地方法。DOM的英文全名為(Document Object Model)

  • DOM中的 "D"
    document 即文檔,它可將你編寫的網(wǎng)頁文檔轉(zhuǎn)換為一個(gè)文檔對象。
  • DOM中的 "O"
    object 即對象,對象是一種自足的數(shù)據(jù)集合。與某個(gè)對象相關(guān)聯(lián)的變量稱為這個(gè)對象的屬性,只能通過某個(gè)特定對象去調(diào)用的函數(shù)稱為這個(gè)對象的方法。每個(gè)節(jié)點(diǎn)都是一個(gè)對象。
  • DOM中的 "M"
    model 即模型,節(jié)點(diǎn)樹就是一種模型HTML中的各類標(biāo)簽的相互嵌套構(gòu)成了模型。


    HTML DOM樹

二 節(jié)點(diǎn)(node)

文檔是由節(jié)點(diǎn)構(gòu)成的集合,DOM節(jié)點(diǎn)可以包含其他類型的節(jié)點(diǎn),具有嵌套關(guān)系而不是獨(dú)立存在的。其中三種節(jié)點(diǎn)為:元素節(jié)點(diǎn)、文本節(jié)點(diǎn)和屬性節(jié)點(diǎn)。

1)元素節(jié)點(diǎn)

元素節(jié)點(diǎn)是DOM的原子,即HTML的基本元素,如<body>、<p>和<ul>之類的元素。
沒有被包含在其他元素里的唯一的元素是<html>元素,它是節(jié)點(diǎn)樹的根元素。

2)文本節(jié)點(diǎn)

元素節(jié)點(diǎn)只是節(jié)點(diǎn)類型的一種,例如<p>元素中包含著文本"hello topview!",它就是一個(gè)文本節(jié)點(diǎn)。文節(jié)點(diǎn)總是被包含在元素節(jié)點(diǎn)的內(nèi)部,但也有例外,如表格元素<ul>,只包含元素節(jié)點(diǎn)。

3)屬性節(jié)點(diǎn)

屬性節(jié)點(diǎn)用來對元素做出更具體的描述。因?yàn)閷傩钥偸潜环旁谄鹗紭?biāo)簽中,所以屬性節(jié)點(diǎn)總是被包含在元素節(jié)點(diǎn)中。并非所有的元素都包含屬性,但所有的屬性都被元素包含。

三 獲取元素

有三種DOM方法可以獲取元素節(jié)點(diǎn),分別是通過元素ID,通過標(biāo)簽名字和通過類名字來獲取。

1)getElementById

這個(gè)方法將放回一個(gè)與那個(gè)有著給定id屬性值的元素節(jié)點(diǎn)對應(yīng)的對象。參數(shù)為標(biāo)簽的名字。

<!DOCTYPE html>
<html lang = "en">
<head>
    <meta charset="utf-8">
    <title>Shopping list</title>
</head>
<body>
  <ul id="purchases">
    <li>Atin of beans</li>
  </ul>
  <script>
    alert(typeof document.getElementById("purchases"));
  </script>
</body>
</html>

這個(gè)調(diào)用將會(huì)返回一個(gè)對象,在瀏覽器中加載這個(gè)文件,會(huì)彈出一個(gè)alert對話框,它向你們報(bào)告 document.getElementById("purchases")的類型,是一個(gè)對象。即對話框會(huì)顯示 "object"。

2)getElementByTagName

getElementByTagName 方法返回一個(gè)對象數(shù)組,它的參數(shù)是標(biāo)簽的名字。
下面這個(gè)例子會(huì)返回一個(gè)列表項(xiàng)元素的個(gè)數(shù) 3。

<!DOCTYPE html>
<html lang = "en">
<head>
    <meta charset="utf-8">
<title>Shopping list</title>
</head>
<body>
  <ul id="purchases">
    <li>Atin of beans</li>
    <li>Atin of beans</li>
    <li>Atin of beans</li>
  </ul>
  <script>
    alert(document.getElementsByTagName("li").length);
  </script>
</body>
</html>

另外getElementByTagName允許把一個(gè)通配符作為它的參數(shù)。

通配符是一種特殊語句,主要有星號(*)和問號(?),用來模糊搜索文件。 當(dāng)查找文件夾時(shí),可以使用它來代替一個(gè)或多個(gè)真正字符;當(dāng)不知道真正字符或者懶得輸入完整名字時(shí),常常使用通配符代替一個(gè)或多個(gè)真正的字符。

可以通過下面的代碼返回一份文檔中元素節(jié)點(diǎn)的總數(shù)。

alert(document.getElementsByTagName("*").length);

3)getElementsByClassName

這個(gè)方法可以通過class屬性中的類名來訪問元素。與getElementsByTagName方法相似,getElementsByClassName也只接受一個(gè)參數(shù),就是類名。

alert(document.getElementsByClassName("sale"));

使用這個(gè)方法還可以查找那些帶有多個(gè)類名的元素,要指定多個(gè)類名,只要在字符串參數(shù)中使用空格分隔類名即可。例如:

alert(document.getElementsByClassName("important sale").length);

如果警告框顯示1,則表示只有一個(gè)元素匹配,即只有一個(gè)元素同時(shí)帶有兩個(gè)類名。
注意類名的實(shí)際順序和個(gè)數(shù)不重要,或者說沒有限制。

四 獲取和設(shè)置屬性

上面講的是三種獲取特定元素的方法,下面說的是獲取元素后對其屬性進(jìn)行獲取和設(shè)置的方法。getAttribute方法可以用來獲取屬性,setAttribute方法可以用來更改屬性節(jié)點(diǎn)的值。

1)getAttribute

getAttribute是一個(gè)函數(shù),只有一個(gè)參數(shù)——你打算查詢的屬性的名字。

object.getAttribute(attribute);

與上面學(xué)的方法不同,getAttribute方法不屬于document對象,所以不能通過document對象調(diào)用,它只能通過元素節(jié)點(diǎn)對象調(diào)用,例如下面的例子,可以與getElementByTagName方法合用,獲取每個(gè)<p>元素的title屬性。

<!DOCTYPE html>
<html lang = "en">
<head>
    <meta charset="utf-8">
    <title>Shopping list</title>
</head>
<body>
  <p title="a gentle reminder">Don't forget me!</p>
  <p>hello world!</p>
  <ul id="purchases">
    <li>Atin of beans</li>
    <li>Atin of beans</li>
    <li>Atin of beans</li>
  </ul>
  <script>
    var paras = document.getElementsByTagName("p");
      for (var i = 0; i < paras.length; i++) {
        var title_text = paras[i].getAttribute("title");
        if (title_text)  alert(title_text);
      }
  </script>
</body>
</html>

2)setAttribute

setAttribute()方法允許我們對某些節(jié)點(diǎn)的屬性做出更改,和getAttribute一樣,setAttribute只能用于元素節(jié)點(diǎn)。

object.setAttribute(attribute, value);

以下代碼先從文檔中獲取全部帶有title屬性的<p>元素,然后把他們的title屬性值都修改為zhong,原先的屬性值會(huì)被覆蓋。值得注意的是。文檔源代碼中title屬性仍然是改變前的值,也就是說,setAttribute做出的修改不會(huì)反映到文檔本身的源代碼中。DOM的工作模式是先加載文檔的靜態(tài)內(nèi)容,再動(dòng)態(tài)刷新,動(dòng)態(tài)刷新不影響文檔的靜態(tài)內(nèi)容。也就是說,DOM可以對頁面進(jìn)行動(dòng)態(tài)刷新卻不需要在瀏覽器中刷新界面。

<!DOCTYPE html>
<html lang = "en">
<head>
    <meta charset="utf-8">
    <title>Shopping list</title>
</head>
<body>
  <p title="a gentle reminder">Don't forget me!</p>
  <p>hello world!</p>
  <ul id="purchases">
    <li>Atin of beans</li>
    <li>Atin of beans</li>
    <li>Atin of beans</li>
  </ul>
  <script>
    var paras = document.getElementsByTagName("p");
      for (var i = 0; i < paras.length; i++) {
        var title_text = paras[i].getAttribute("title");
        if (title_text)  {
            paras[i].setAttribute("title","zhong");
            alert(paras[i].getAttribute("title"));
        }
      }
  </script>
</body>
</html>

注意以下的寫法是錯(cuò)誤的:

var paras = document.getElementsByTagName("p");
  for (var i = 0; i < paras.length; i++) {
    var title_text = paras[i].setAttribute("title","zhong");
    if (title_text)  {
        //paras[i].setAttribute("title","zhong");
        alert(paras[i].getAttribute("title"));
    }
  }

setAttribute()只能單獨(dú)使用,不能賦值給某個(gè)變量。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ??DOM(文檔對象模型)是針對 HTML 和 XML 文檔的一個(gè) API(應(yīng)用程序編程接口)。 ??DOM 描繪...
    霜天曉閱讀 3,869評論 0 7
  • 本章內(nèi)容 理解包含不同層次節(jié)點(diǎn)的 DOM 使用不同的節(jié)點(diǎn)類型 克服瀏覽器兼容性問題及各種陷阱 DOM 是針對 HT...
    悶油瓶小張閱讀 777評論 0 1
  • ??DOM 1 級主要定義的是 HTML 和 XML 文檔的底層結(jié)構(gòu)。 ??DOM2 和 DOM3 級則在這個(gè)結(jié)構(gòu)...
    霜天曉閱讀 1,601評論 1 3
  • Element 類型 除了 Document 類型之外,Element 類型就要算是 Web 編程中最常用的類型了...
    劼哥stone閱讀 725評論 0 3
  • 計(jì)劃 2015.4.30 繼續(xù)想energy harvesting + packet arrival + batt...
    蝦米小華閱讀 691評論 1 2

友情鏈接更多精彩內(nèi)容