天天看點

DOM腳本程式設計-JavaScript入門基礎(018)

DOM節點:

DOM層級結構中最頂端的對象是window對象,而document對象是它的子對象之一。

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>任務清單</title></head><body>    <h1>工作安排</h1>    <ol id="toDoList">        <li>拖地</li>        <li>擦窗戶</li>        <li>回郵件</li>    </ol>    <p id="toDoNotes">完成以上工作,可以看電視。</p></body></html>      

當頁面完成加載之後,DOM才是可用的。

html元素包含頁面上的其他全部标簽;

它作為父元素,有兩個子元素,分别是head和body;

head有兩個子元素,分别是meta和title;

body有三個子元素,分别是h1,ol和p;

ol有三個子元素,分别是li;

DOM上這種層次結構的關系,其中的交叉點和末端點稱為“節點”;

節點一般分為元素節點和文本節點,比如段落元素p;文本節點裡包含文本内容;

每種節點類型都有一個關聯值,儲存在屬性nodeType中。

nodeType值 節點類型
1 元素
2 屬性
3 文本
4 CDATA區域
5 實體引用
6 實體
7 執行指令
8 HTML注釋
9 文檔
10 文檔類型DTD
11 文檔片段
12 标簽

每一個節點都有一個childNodes屬性。用來通路其子節點的。childNodes是一個集合清單,按索引通路。

比如:

var olElement = document.getElementById('toDoList');olElement.childNode;      

需要統計節點數量時,可以

var count = 0;for(var i=0;i<olElement.childNodes.length;i++){  if(olElement.childNodes[i].nodeType == 1)  {    count++;  }}      

當然,我們也可以将這個放在一個函數中,重複使用

function countListItems(){    var olElement = document.getElementById("toDoList");    var count = 0;    for(let i=0; i<olElement.childNodes.length;i++)    {        if(olElement.childNodes[i].nodeType == 1)        {            count++;        }    }    alert("List contains " + count + " items");} window.onload = countListItems;      

注意,當我們把函數指派給頁面加載函數時,函數不需要帶括号;帶括号表示執行函數體代碼;

firstChild和lastChild屬性:

使用firstChild相當于childNodes【0】,

而lastChild相當于childNodes[childNodes.length - 1];

parentNode屬性:

儲存的是節點的父節點。

nextSibling和previousSibling屬性:

是節點的具有相同父節點的兄弟節點;

使用nodeValue屬性:

它傳回儲存在節點的值;

使用nodeName屬性:

它是個隻讀屬性,可以傳回節點名稱;

nodeName值
元素标簽名稱
屬性名稱
字元串

getElementsByTagName方法:

document對象的這個方法,可以獲得特定的全部标簽集合,

比如,

var divS = document.getElementsByTagName("div");      

以上就是獲得頁面中全部的div;

完整代碼:

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>To Do List</title>    <script>        function countListItems() {            var olElement = document.getElementById('toDoList');            var listItems = olElement.getElementsByTagName("li");            alert("list contains " + listItems.length + " items");        }         window.onload = countListItems;</script></head><body>    <h1>Things To Do</h1>    <ol id="toDoList">        <li>Mow the lawn</li>        <li>Clean the windows</li>        <li>Answer your email</li>    </ol>    <p id="toDoNotes">Make sure all these are completed by 8pm so you can watch the game on TV.</p></body></html>      

讀取元素的屬性:

<div id="id1" title="report">some text</div>      

title就是div的屬性,屬性通常表示為“attribute=value”;

獲得目标元素的屬性,就可以

var myNode = document.getElementById("id1");myNode.getAttribute("title");      

如果嘗試通路不存在的屬性時,傳回null;是以有時候我們可以利用這個特點,檢測元素是否有特定的屬性。

if(myNode.getAttribute("xxx")){    ......代碼}      

建立新節點:

第一步,建立一個節點。節點此時處于某種不确定節點;

第二部,把節點添加至DOM樹的指定位置;

document對象的createElement方法可以建立任何類型的HTML元素,

var div1 = document.createElement("div");      

文本節點,可以使用createTextNode方法建立,

var text1 = document.createTextNode("some text");      

操作子節點:

可以使用appendChild()方法,追加節點。

var text1 = document.createTextNode("some text");var div1 = document.createElement("div");div1.appendChild(text1);      

這樣div1元素中,就有了一個文本節點。但是appendChild方法總是把節點追加在後面的。

insertBefore()方法:

<div id="id1">  <p id="p1">some text</p>  <p id="p2">some text</p></div>      
var newPara = document.createElement("p");var p2 = document.getElementById("p2");var div1 = document.getElementById("id1");div1.insertBefore(newPara,p2);      

以上就把新節點插入在p1和p2之間。

removeChild()方法:

可以在DOM樹中删除節點。

var div1 = document.getElementById("id1");var p2 = document.getElementById("p2");div1.removeChild(p2);      

當父節點不友善引用時,可以使用parentNode屬性代替,

var p2 = document.getElementById("p2);p2.parentNode.removeChild(p2);      

setAttribute()方法:

var p2 = document.getElementById("p2);p2.setAttribute("title","some text");      

下節我們接着分享。

繼續閱讀