javascript DOM 操作

来源:http://www.cnblogs.com/zuidongfeng/archive/2016/05/24/5516990.html
-Advertisement-
Play Games

在javascript中,經常會需要操作DOM操作,在此記錄一下學習到DOM操作的知識。 一、JavaScript DOM 操作 1.1、DOM概念 DOM :Document Object Model(文本對象模型)。 D : 文檔(html或xml文檔) O : 對象(文檔對象) M : 模型 ...


 在javascript中,經常會需要操作DOM操作,在此記錄一下學習到DOM操作的知識。

一、JavaScript DOM 操作

1.1、DOM概念

  DOM :Document Object Model(文本對象模型)。

  D : 文檔(html或xml文檔)

  O : 對象(文檔對象)

  M : 模型

1.2、DOM結構

  DOM將文檔以家譜樹的形式來表現。

 

  下麵是一個簡單的html文檔,我們可以看出該文檔的DOM結構如下

  

 

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="UTF-8">
 5         <title></title>
 6     </head>
 7     <body>
 8         <p title="hello">該實例使用 addEventListener() 方法來向按鈕添加點擊事件。</p>
 9              
10         
11         <ul>
12             <li>1</li>
13             <li>2</li>
14             <li>3</a>
15         </ul>
16         
17     </body>
18 </html>
19  

 

 

   

1.3、DOM節點類型

  1). 元素節點

  2). 屬性節點: 元素的屬性, 可以直接通過屬性的方式來操作. 

  3). 文本節點: 是元素節點的子節點, 其內容為文本.

 

  舉個例子:

  <p title="hello">文本內容。</p>
  上面這行代碼中:p標簽為元素節點、title屬性為屬性節點、p的內容"文本內容"則為文本節點。其中文本節點是 p 元素節點的子節點。

二、JavaScript DOM 常用操作

  2.1、獲取元素節點   

   1). document.getElementById: 根據 id 屬性獲取對應的單個節點

   2). document.getElementsByTagName: 根據標簽名獲取指定節點名字的數組,通過數組對象 length 屬性可以獲取數組的長度

   3). document.getElementsByName: 根據節點的 name 屬性獲取符合條件的節點數組

 

   案例:

    

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="UTF-8">
 5         <title></title>
 6         <script>
 7             //文檔載入完後執行 onload 方法
 8             window.onload = function(){
 9                 // 根據 id 屬性獲取對應的單個節點
10                 var inputText = document.getElementById("txt");
11                 alert(inputText.value);
12                 
13                 //根據標簽名獲取指定節點名字的數組,通過數組對象 length 屬性可以獲取數組的長度
14                 var cityNodes = document.getElementsByTagName("li");
15                 alert(cityNodes.length);
16                 
17                 //根據節點的 name 屬性獲取符合條件的節點數組
18                 var dirNodes = document.getElementsByName("direction");
19                 alert(dirNodes.length);
20             }
21         </script>
22     </head>
23     <body>
24         
25         <input type="text" id="txt" value="test getElementById"/>
26         
27         <br /><br /><br />
28         <ul id="city">
29             <li>北京</li>
30             <li>華盛頓</li>
31             <li>倫敦</li>
32             <li>巴黎</li>
33         </ul>
34         
35         <br /><br /><br />
36         
37         <ul>
38             <li name="direction">east</li>
39             <li name="direction">south</li>
40             <li name="direction">west</li>
41             <li name="direction">north</li>
42         </ul>
43         
44         
45     </body>
46 </html>

   

  2.2、獲取屬性節點    

   1). 可以直接通過elementNode.attr 這樣的方式來獲取和設置屬性節點的值

   2). 通過元素節點的 getAttributeNode 方法來獲取屬性節點,然後在通過 nodeValue 來讀寫屬性值

   

    案例:

 

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="UTF-8">
 5         <title></title>
 6         <script>
 7             //文檔載入完後執行 onload 方法
 8             window.onload = function(){
 9                 // 根據 id 屬性獲取 元素節點
10                 var inputText = document.getElementById("txt");
11                 
12                 //通過elementNode.attr 這樣的方式來獲取和設置屬性節點的值
13                 //獲取 id 為 txt 的文本輸入框 的 value 屬性值
14                 var txtValue = inputText.value;
15                 
16                 alert(txtValue);
17                 
18                 //設置文本框的 value屬性值
19                 inputText.value = "value changed";
20                 
21                 
22                 
23                 //通過元素節點的 getAttributeNode 方法來獲取屬性節點
24                 //獲取文本框元素節點的 type 屬性節點
25                 var attrNode = inputText.getAttributeNode("type");
26                 
27                 //獲取屬性節點的值
28                 var attrNodeValue = attrNode.nodeValue;
29                 alert(attrNodeValue);
30             }
31         </script>
32         
33     </head>
34     <body>
35         
36         <input type="text" id="txt" value="test getAttributeNode"/>
37         
38     </body>
39 </html>

  2.3、 獲取元素節點的子節點(只有元素節點才有子節點!!)

 

   1). childNodes 屬性獲取全部的子節點, 但該方法不實用. 因為如果要獲取指定的節點的指定子節點的集合, 可以直接調用元素節點的 getElementsByTagName()

   方法來獲取. 

   2). firstChild 屬性獲取第一個子節點

   3). lastChild 屬性獲取最後一個子節點

 

    案例:

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="UTF-8">
 5         <title></title>
 6         <script>
 7             //文檔載入完後執行 onload 方法
 8             window.onload = function(){
 9                 // 根據 id 為 city 的元素節點
10                 var cityNode = document.getElementById("city");
11                 
12                 //用 childNodes 獲取元素節點 cityNode 的所有子節點
13                 //該方法不實用
14                 var cityNodeChildren = cityNode.childNodes;
15                 alert(cityNodeChildren.length);
16                 
17                 //獲取 cityNode 元素節點的所有 li 子節點.
18                 var cityLiNodes = cityNode.getElementsByTagName("li");
19                 alert(cityLiNodes.length);
20                 
21                 //取 cityNode 元素節點的第一個子節點和最後一個子節點. 
22                 alert(cityNode.firstChild);
23                 alert(cityNode.lastChild);
24                 
25             }
26         </script>
27     </head>
28     <body>
29         
30         
31         <ul id="city"><!--此處換行,也是ul的一個子節點-->
32             <li>北京</li>
33             <li>華盛頓</li>
34             <li>倫敦</li>
35             <li>巴黎</li>
36         </ul>
37         
38         
39         
40     </body>
41 </html>

 

  2.4、 獲取文本節點

   1). 步驟: 元素節點 --> 獲取元素節點的子節點
   2). 若元素節點只有文本節點一個子節點,
    例如:<p title="textNode" id="test">文本節點內容</p>

    可以先獲取到指定的元素節點 eleNode, 然後利用 eleNode.firstChild.nodeValue 的方法來讀寫其文本節點的值,也可以直接用eleNode.textContent

    來獲取文本節點的值。 

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="UTF-8">
 5         <title></title>
 6         <script>
 7             //獲取文本節點
 8             window.onload = function(){
 9                 
10                 //文本節點一定是元素節點的子節點. 
11                 
12                 //1. 獲取文本節點所在的元素節點
13                 var parentNode = document.getElementById("test");
14                 
15                 //2. 通過 firstChild 定義為到文本節點
16                 var textNode = parentNode.firstChild;
17                 
18                 //3. 通過操作文本節點的 nodeValue 屬性來讀寫文本節點的值. 
19                 alert(textNode.nodeValue);
20                 
21                 //也可以用 elementNode.textContent 來獲取文本節點的值
22                 alert(parentNode.textContent);
23                 
24             }
25         </script>
26     </head>
27     <body>
28         
29         <p title="textNode" id="test">文本節點內容</p>
30     </body>
31 </html>

 

  2.5、節點的屬性

   1). nodeName: 代表當前節點的名字. 只讀屬性.
     如果給定節點是一個文本節點, nodeName 屬性將返回內容為 #text 的字元串
   2). nodeType:返回一個整數, 這個數值代表著給定節點的類型.
    只讀屬性. 1 -- 元素節點, 2 -- 屬性節點, 3 -- 文本節點
   3). nodeValue:返回給定節點的當前值(字元串). 可讀寫的屬性
    ①. 元素節點, 返回值是 null.
    ②. 屬性節點: 返回值是這個屬性的值
    ③. 文本節點: 返回值是這個文本節點的內容

  

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="UTF-8">
 5         <title></title>
 6         <script type="text/javascript">
 7             
 8             //關於節點的屬性: nodeType, nodeName, nodeValue
 9             //在文檔中, 任何一個節點都有這 3 個屬性
10             //而 id, name, value 是具體節點的屬性. 
11             window.onload = function(){
12                 
13                 //1. 元素節點的這 3 個屬性
14                 var bjNode = document.getElementById("bj");
15                 alert(bjNode.nodeType); //元素節點: 1
16                 alert(bjNode.nodeName); //節點名: li
17                 alert(bjNode.nodeValue); //元素節點沒有 nodeValue 屬性值: null
18                 
19                 //2. 屬性節點
20                 var nameAttr = document.getElementById("name")
21                                        .getAttributeNode("name");
22                 alert(nameAttr.nodeType); //屬性節點: 2
23                 alert(nameAttr.nodeName); //屬性節點的節點名: 屬性名
24                 alert(nameAttr.nodeValue); //屬性節點的 nodeValue 屬性值: 屬性值
25                 
26                 //3. 文本節點:
27                 var textNode = bjNode.firstChild;    
28                 alert(textNode.nodeType); //文本節點: 3
29                 alert(textNode.nodeName); //節點名: #text
30                 alert(textNode.nodeValue); //文本節點的 nodeValue 屬性值: 文本值本身. 
31             
32                 //nodeType、nodeName 是只讀的.
33                 //而 nodeValue 是可以被改變的。 
34                 //以上三個屬性, 只有在文本節點中使用 nodeValue 讀寫文本值時使用最多. 
35             }
36             
37         </script>
38     </head>
39     <body>
40         
41         <p>你喜歡哪個城市?</p>
42         <ul id="city">
43             <li id="bj" name="BeiJing">北京</li>
44             <li>上海</li>
45             <li>東京</li>
46             <li>首爾</li>
47         </ul>
48         
49         <br><br>
50         name: <input type="text" name="username" id="name" value="atguigu"/>
51         
52     </body>
53 </html>

   2.6、創建元素節點和文本節點及為元素節點添加子節點:

   1). createElement(): 按照給定的標簽名創建一個新的元素節點. 方法只有一個參數:被創建的元素節點的名字, 是一個字元串.

    方法的返回值:是一個指向新建節點的引用指針. 返回值是一個元素節點, 所以它的 nodeType 屬性值等於 1.
       新元素節點不會自動添加到文檔里, 它只是一個存在於 JavaScript 上下文的對象.

   2). createTextNode(): 創建一個包含著給定文本的新文本節點. 這個方法的返回值是一個指向新建文本節點引用指針. 它是一個文本節點, 所以它的 nodeType 屬性等於 3.
    方法只有一個參數:新建文本節點所包含的文本字元串. 新元素節點不會自動添加到文檔里。

   3). appendChild(): var reference = element.appendChild(newChild): 給定子節點 newChild 將成為給定元素節點 element 的最後一個子節點.
    方法的返回值是一個指向新增子節點的引用指針.

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="UTF-8">
 5         <title></title>
 6         <script>
 7             window.onload = function(){
 8                 //獲取 id 為 city 的 元素節點 cityNode
 9                 var cityNode = document.getElementById("city");
10                 
11                 //創建一個 li 元素節點, 返回值為指向元素節點的引用
12                 //document.createElement(elementTagName) 創建一個元素節點
13                 //參數為元素節點名稱
14                 var liNode = document.createElement("li");
15                 
16                 //創建 "巴塞羅那" 的文本節點
17                 //document.createTextNode(string) 創建一個文本節點
18                 //參數為文本值, 返回該文本節點的引用. 
19                 var textNode = document.createTextNode("巴塞羅那");
20                 
21                 //elementNode.appendChild(newChild): 為 elementNode
22                 //新添加 newChild 子節點, 該子節點將作為 elementNode 的最後
23                 //一個子節點
24                 liNode.appendChild(textNode);
25                 cityNode.appendChild(liNode);
26             }
27             
28         </script>
29     </head>
30     <body>
31         
32          <ul id="city">
33              <li>北京</li>
34              <li>華盛頓</li>
35              <li>倫敦</li>
36              <li>巴黎</li>
37          </ul>
38         
39     </body>
40 </html>

 

  2.7、節點的替換:

   1). replaceChild(): 把一個給定父元素里的一個子節點替換為另外一個子節點

    var reference = element.replaceChild(newChild,oldChild);
    返回值是一個指向已被替換的那個子節點的引用指針
   2). 該方法除了替換功能以外還有移動的功能.
   3). 該方法只能完成單向替換, 若需要使用雙向替換

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.前言 上一篇jQuery分析(2)中瞭解了jQuery庫的骨架實現原理,這就好比搖滾音樂,搖滾音樂不是某種音樂他就像一個音樂盒子,裡面包含了各種不同的搖滾風格(山地、朋克、鄉村、流行、硬搖、金屬、迷幻等)。那麼上一篇只是大致瞭解了jQuery的基本形狀,從這篇文章開始會深入jQuery庫的各種函 ...
  • 前言 React 的核心思想是:封裝組件,各個組件維護自己的狀態和 UI,當狀態變更,自動重新渲染整個組件。 最近前端界鬧的沸沸揚揚的技術當屬 了,加上項目需要等等原因,自己也決定花些時間來好好認識下這個東西。然後花時間自己寫了一個demo: , 你可以先 "點這裡去看react todo" rea ...
  • 動畫屬性 背景屬性 邊框(Border) 和 輪廓(Outline) 屬性 盒子(Box) 屬性 顏色(Color) 屬性 內邊距(Padding) 屬性 媒體頁面內容屬性 尺寸(Dimension) 屬性 彈性盒子模型(Flexible Box) 屬性 字體(Font) 屬性 內容生成屬性(Gen ...
  • 效果:http://hovertree.com/texiao/css3/24/效果圖:代碼如下: 轉自:http://hovertree.com/h/bjaf/css3xingxi.htm 特效彙總:http://www.cnblogs.com/roucheng/p/texiao.html ...
  • 二刷《高程》第八章BOM筆記整理。 如果要在Web中使用JavaScript,那麼BOM(瀏覽器對象模型)才是真正核心,BOM提供很多對象,用於訪問瀏覽器的功能,這些功能與任何網頁內容無關。 window對象 location對象 navigator對象 screen對象 history對象 win ...
  • 背景 由於公司的CMS系統里,只接受rar格式壓縮的文件,所以沒法直接使用nodejs里提供的zip壓縮組件。只能從winRar軟體入手了,但網上沒有多少這方面相關的東西,所以下麵也是自己嘗試著在做。 主要解決的幾個問題 rar軟體的位置獲取問題 通過node的命令行組件child_process, ...
  • 1. 禁止右鍵點擊 $(document).ready(function(){ $(document).bind("contextmenu",function(e){ return false; }); }); 2. 隱藏搜索文本框文字 Hide when clicked in the search ...
  • 今天寫了一個回到頂部的demo,沒有複雜的邏輯,所以想來分享。 原理: 1.css上把按鈕固定定位在瀏覽器右下角上,預設為隱藏。 2.當頁面滾動的時候(window.onscroll),按鈕block, 3.當點擊按鈕的時候讓頁面的可視區高度距離瀏覽器頂端逐漸減少直至為0, a)此時需要用到一個定時 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...