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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...