CH16-DOM元素增刪改

CH16-DOM元素增刪改

本章目標

  • 掌握如何使用DOM獲取節點時使用的屬性
  • 熟練使用DOM節點進行創建、添加、刪除、替換

一、使用DOM獲取節點時使用的屬性

1.1 首尾子節點

firstChild:獲取當前節點的首個子節點,注意:換行符、空格等也是節點。

lastChild:訪問當前節點的最后一個子節點,是 Node 對象。

注:lastChild 返回的是這些子節點:元素節點、文本節點或注釋節點。元素之間的空白也是文本節點。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script>function test1(){//獲取首個子節點var node=document.querySelector("#ul_1").firstChild;alert(node.innerHTML);}function test2(){//獲取尾個子節點var node=document.querySelector("#ul_1").lastChild;alert(node.innerHTML);}</script>
</head><body><ul id="ul_1" class="abc"><li>li-1</li><li>li-2</li><li id="li_3">li-3</li><li>li-4</li><li>li-5</li></ul><button onclick="test1()">獲取首個子節點</button><button onclick="test2()">獲取尾個子節點</button></body></html>

1.2 首尾元素子節點

firstElementChild :訪問當前節點的首個元素子節點,是 Element對象。

lastElementChild :訪問當前節點的尾個元素子節點,是 Element對象。

 	   function test1(){//獲取首個元素子節點var node=document.querySelector("#ul_1").firstElementChild;alert(node.innerHTML);}function test2(){//獲取尾個元素子節點var node=document.querySelector("#ul_1").lastElementChild;alert(node.innerHTML);}

1.3 兄弟節點

previousSibling:返回同一層級中指定節點的前一個節點,是 Node 對象。

previousSibling 屬性是只讀的。

如果沒有 previousSibling 節點,則返回值是 null。

nextSibiling:返回同一層級中指定節點之后緊跟的節點,是Node對象

nextSibling 屬性是只讀的。

如果沒有 nextSibiling節點,則返回值是 null。

function test3() {var node1=document.querySelector("#li_3").previousSibling;var node2=document.querySelector("#li_3").nextSibiling;alert("上一個節點:"+node1.innerHTML);alert("下一個節點:"+node2.innerHTML);
}

注:nextSibiling 返回下一個同胞節點:元素節點、文本節點或注釋節點 。

previousElementSibling :返回同一層級中指定節點之前的元素節點,是Element對象

nextElementSibling :返回同一層級中指定節點之后的元素節點,是Element對象

function test4() {var node1=document.querySelector("#li_3").previousElementSibling ;var node2=document.querySelector("#li_3").nextElementSibling ;alert("上一個元素節點:"+node1.innerHTML);alert("下一個元素節點:"+node2.innerHTML);
}

1.4 父、子節點

parentNode:訪問當前元素節點的父節點 如果指定的節點沒有父節點則返回 null.

childNodes:當前節點的所有子節點 返回所有節點的數組,只返回文本和元素節點,對于屬性節點直接無視

function test5(){//獲取父節點var node=document.querySelector("#ul_1").parentNode;alert(node.nodeName);
}
function test6(){//獲取子節點var nodes=document.querySelector("#ul_1").childNodes;  //調試觀察各節點屬性for(var i=0;i<nodes.length;i++){var node=nodes[i];if(node.nodeType==3)continue;alert(node.innerHTML);}  }

1.4 節點屬性

nodeName:節點的名稱

nodeName 是只讀的

元素節點的 nodeName 與標簽名相同 ,屬性節點的 nodeName 與屬性名相同, 文本節點的 nodeName 始終是 #text ,文檔節點的 nodeName 始終是 #document 。

 function test7(){//元素節點的nodeNamealert(document.querySelector("#ul_1").nodeName);//屬性節點的nodeNamevar node= document.getElementById("ul_1").attributes["class"];alert(node.nodeName);//文本節點的nodeNamealert(document.querySelector("#li_3").firstChild.nodeValue);}

注:nodeName 所包含的 XML 元素的標簽名稱永遠是大寫的

nodeValue:節點的值

元素節點的 nodeValue 是 undefined 或 null

文本節點的 nodeValue 是文本本身

屬性節點的 nodeValue 是屬性值

 function test8(){//元素節點的nodeValuealert(document.querySelector("#ul_1").nodeValue);//屬性節點的nodeValuevar node= document.getElementById("ul_1").attributes["class"];alert(node.nodeValue);//文本節點的nodeValuealert(document.querySelector("#li_3").firstChild.nodeValue);}

注:nodeValue 屬性對于文檔節點和元素節點是不可用的。

nodeType:節點類型

? 1:表示當前節點的類型是標簽(元素)

? 2:表示屬性節點

? 3:表示文本節點

nodeType屬性返回選定節點的節點類型,可以讓我們知道、區分文檔中的各個節點。

 function test9(){//元素節點的nodeTypealert(document.querySelector("#ul_1").nodeType);//屬性節點的nodeTypevar node= document.getElementById("ul_1").attributes["class"];alert(node.nodeType);//文本節點的nodeTypealert(document.querySelector("#li_3").firstChild.nodeType);}

二、操作DOM節點

2.1 創建一個節點

createElement、createTextNode

createElement() 方法通過指定名稱創建一個元素

使用createElement創建節點:

例:創建一個p標簽追加到body

在這里插入圖片描述

<h2>createElement() 方法</h2>
<p>創建帶一些文本的 p 元素:</p>
<script>
window.onload=function(){// 用createElement創建元素var c= document.createElement("p");//設置元素的文本c.innerText = "這是一個p標簽";// 追加到 bodydocument.body.appendChild(c);}
</script>

注:1.createElement()創建了一個新的元素,參數是String類型的創建元素的名稱

? 2.createElement()方法常和appendChild()一起用。createElement()方法創建元素后,一般用appendChild()加入內容。

createTextNode() 方法創建文本節點

使用createTextNode創建節點:

例:創建一個節點追加到body里面

效果圖:

在這里插入圖片描述

<script>
window.onload=function(){//使用createTextNode創建文本節點var textNode = document.createTextNode("Hello World");//追加到bodydocument.body.appendChild(textNode);}
</script>

2.2 向頁面加入一個節點

appendChild、insertBefore

例:創建一個li元素在里面創建一個文本節點再添加到已有的子元素前面

效果圖:

在這里插入圖片描述

<ul id="myList"><li id="a">hello</li><li id="b">world</li>
</ul>
<script>
window.onload=function(){// 創建 "li" 元素:var newNode = document.createElement("li");// 創建文本節點:var textNode = document.createTextNode("JQuery");// 向 "li" 元素添加文本節點:newNode.appendChild(textNode);// 在已有子元素之前插入var list = document.getElementById("myList");list.insertBefore(newNode, list.children[0]);}
</script>

案例中的appendChild() 方法,將新元素作為父元素的最后一個子元素進行添加。如果需要將新元素添加到開始位置,可以使用 insertBefore() 方法。

注:1. insertBefore() 方法是在被選元素前插入 HTML 元素。

? 2.如需在被選元素后插入 HTML 元素,使可用 insertAfter() 方法。

? 3.如果參數是已存在的元素,它將從它的當前位置被移除,并被插入在被選元素之前。

2.3 刪除頁面中的某一個節點

removeChild():刪除 參數是要刪除的對象。返回值是removeChild前的那個父節點

例:點擊按鈕刪除第一個子節點

刪除前:

在這里插入圖片描述

刪除后:

在這里插入圖片描述

<button onclick="myFunction()">刪除第一個子節點</button>
<ul id="myList"><li id="a">hello</li><li id="b">world</li>
</ul><script>function myFunction() {//獲取idvar list = document.getElementById("myList");//通過id刪除第一個節點list.removeChild(list.firstElementChild);}
</script>

注:1.如需刪除 HTML 元素,您必須清楚該元素的父元素。DOM 需要了解您需要刪除的元素,以及它的父元素, 所以無法在不引用父元素的情況下刪除某個元素。

? 2.如果不清楚父元素,可以先找到您需要刪除的子元素,然后使用parentNode屬性來查找其父元素

2.4 修改頁面中的某一個節點

replaceChild() 方法: 替換 HTML DOM 中的元素。

例:點擊替換獲取第一個子元素創建新的文本節點并替換掉第一個子元素的文本

替換前:

在這里插入圖片描述

替換后:

在這里插入圖片描述

<ul id="myList"><li id="a">hello</li><li id="b">world</li>
</ul>
<button onclick="myFunction()">替換</button><script>
function myFunction() {// 選取第一個子元素:var element = document.getElementById("myList").children[0];// 創建新的文本節點:var newNode = document.createTextNode("JavaScript");// 替換文本節點:element.replaceChild(newNode, element.childNodes[0]);            }
</script>

注:1.replaceChild() 方法可將某個子節點替換為另一個。新節點可以是文本中已存在的,或者是你新創建的。

? 2.新節點是要插入的節點對象,括號內第一個。之前的節點是要移除的節點對象,括號內的后一個。

? 3.返回值為替換的新節點。

2.5 復制節點中的某一個節點:

cloneNode() 方法可創建指定的節點的精確拷貝。

cloneNode() 方法 拷貝所有屬性和值。

該方法將復制并返回調用它的節點的副本。

cloneNode(true)參數deep是boolean型。true/false

? true:表示深度復制(將節點及其子節點都進行復制)—- 深拷貝

? false:表示淺復制(只復制節點而不復制子節點)—- 淺拷貝

例:點擊按鈕復制最后一個節點追加到對應列表id后面

復制前:

在這里插入圖片描述

復制后:

在這里插入圖片描述

<button onclick="myFunction()">復制</button><ul id="myList1"><li>JS</li><li id="b">JQ</li></ul>
<ul id="myList2"><li>HTML</li><li>Css</li></ul><script>function myFunction() {//獲取列表id的最后一個節點var node = document.getElementById("myList2").lastChild;//將節點復制var clone = node.cloneNode(true);//將節點追加到對應的列表id后面document.getElementById("myList1").appendChild(clone);            }
</script>

2.6 獲取元素的非行間樣式:

getComputedStyle(非IE使用)、currentStyle(IE使用)

例:獲取背景顏色的屬性值賦值到對應的文本

效果圖:

在這里插入圖片描述

<h2 id="test" style="background-color:pink">getComputedStyle() 方法</h2>
<p id="demo"></p>
<script>
window.onload=function(){//獲取idvar get = document.getElementById("test");//獲取id的樣式var cssObj = window.getComputedStyle(get, null);//通過樣式找到對應背景顏色的屬性值var bgColor = cssObj.getPropertyValue("background-color");//將屬性值賦給對應的文本id document.getElementById("demo").innerHTML = bgColor;}
</script>

三、課后作業

  • 預習

  • 完成課堂上機練習

    • 練習1:單擊“刪除”按鈕,使用parentNode訪問當前節點的父親節點等,使用removeChild( )刪除當前商品

      效果如下;

      在這里插入圖片描述

      素材:在這里插入圖片描述

      在這里插入圖片描述

    • 練習2: 完成動態生成表格案例,具體要求如下。

      1. 使用數組把學生數據模擬出來。

      2. 動態創建行、單元格。

      3. 為單元格填充數據。

      4. 提供“刪除”鏈接,可刪除所在的行。

      案例的實現效果如下圖所示。

      在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/44720.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/44720.shtml
英文地址,請注明出處:http://en.pswp.cn/web/44720.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【逆向】-異或-分組異或2

IDA查看源代碼 src長度32&#xff0c;encrypt函數加密&#xff0c;工4個參數&#xff0c;_FFFC雙擊&#xff0c;可以看到是個長度為7的固定值FnTest! 加密函數將4個參數又重新命名&#xff0c;混淆視聽&#xff0c;但是還是可以看到是嵌套循環&#xff0c;動態調試直接看結果可…

ArcGIS Pro SDK (八)地理數據庫 8 拓撲

ArcGIS Pro SDK &#xff08;八&#xff09;地理數據庫 8 拓撲 文章目錄 ArcGIS Pro SDK &#xff08;八&#xff09;地理數據庫 8 拓撲1 開放拓撲和進程定義2 獲取拓撲規則3 驗證拓撲4 獲取拓撲錯誤5 標記和不標記為錯誤6 探索拓撲圖7 找到最近的元素 環境&#xff1a;Visual …

C++11中重要的新特性之 lambda表達式 Part two

序言 在上一篇文章中&#xff0c;我們主要介紹了 C11 中的新增的關鍵詞&#xff0c;以及 范圍for循環 這類語法糖的使用和背后的邏輯。在這篇文章中我們會繼續介紹一個特別重要的新特性分別是 lambda表達式 。 1. lambda表達式 1.1 lambda的定義 C11 中的 lambda表達式 是一種…

昇思25天學習打卡營第19天 | ResNet50遷移學習再續

訓練模型部分代碼解析 構建Resnet50網絡 兩行初始化代碼 weight_init Normal(mean0, sigma0.02)這行代碼定義了一個初始化器weight_init&#xff0c;它將使用均值為0&#xff0c;標準差為0.02的正態分布來初始化網絡中的權重。這種初始化策略有助于在網絡的初始階段避免梯度…

Java基礎之集合

集合和數組的類比 數組: 長度固定可以存基本數據類型和引用數據類型 集合: 長度可變只能存引用數據類型存儲基本數據類型要把他轉化為對應的包裝類 ArrayList集合 ArrayList成員方法 添加元素 刪除元素 索引刪除 查詢 遍歷數組

day30【LeetCode力扣】18.四數之和

day30【LeetCode力扣】18.四數之和 1.題目描述 給你一個由 n 個整數組成的數組 nums &#xff0c;和一個目標值 target 。請你找出并返回滿足下述全部條件且不重復的四元組 [nums[a], nums[b], nums[c], nums[d]] &#xff08;若兩個四元組元素一一對應&#xff0c;則認為兩個…

Linux: Mysql環境安裝

Mysql環境安裝&#xff08;Centos&#xff09; 前言一、卸載多余環境1.1 卸載mariadb1.2 查看并卸載系統mysql和mariadb安裝包 二、換取mysql官方yum源三、安裝并啟動mysql服務3.1 yum源加載3.2 安裝yum源3.3 安裝mysql服務3.3.1 安裝指令3.3.2 GPG密鑰問題解決方法3.3.3 查看是…

循環結構(一)——for語句【互三互三】

文章目錄 &#x1f341; 引言 &#x1f341; 一、語句格式 &#x1f341; 二、語句執行過程 &#x1f341; 三、語句格式舉例 &#x1f341;四、例題 &#x1f449;【例1】 &#x1f680;示例代碼: &#x1f449;【例2】 【方法1】 &#x1f680;示例代碼: 【方法2】…

【C++ 編程】引用 - 給變量起別名、淺復制

基本語法&#xff1a;數據類型 &別名 原名int a 10; int &b a;引用必須初始化 (? int &b;)&#xff0c;初始化后不可改變 (int c 5; b c&#xff1a;b 沒有變成c的別名&#xff0c;而是 a、b 對應的值變更為了 c 的值)本質是指針常量, 淺復制 【黑馬程序員匠…

Cartographer重入門到精通(二):運行作者demo及自己的數據集

在demo數據包上運行cartographer 現在Cartographer和Cartographer的Ros包已經都安裝好了&#xff0c;你可以下載官方的數據集到指定的目錄&#xff08;比如在Deutsches Museum用背包采集的2D和3D 數據&#xff09;&#xff0c;然后使用roslauch來啟動demo。 注&#xff1a;la…

IO半虛擬化-Virtio學習筆記

參考&#xff1a;《深入淺出DPDK》及大佬們的各種博客 Virtio簡介&運行環境 Virtio 是一種用于虛擬化環境中的半虛擬化 I/O 框架&#xff0c;目的是在虛擬機和主機之間提供一種高效的 I/O 機制。關于什么是半虛擬化和全虛擬化&#xff1a;見SR-IOV學習筆記。 YES&#xf…

PDMS二次開發(二十二)——關于1.0.3.1版本升級內容的說明

目錄 1.更新內容介紹2.效果演示3.關于重構自動添加焊口功能的說明3.1錯誤示例 3.問題交流1.創建焊口提示失敗2.程序崩潰 1.更新內容介紹 在添加焊口之前先清除當前branch已有焊口&#xff1b;顯示清除焊口的個數和添加焊口的個數&#xff1b;重構了自動添加焊口功能&#xff0…

值得關注的數據資產入表

不錯的講解視頻&#xff0c;來自&#xff1a;第122期-杜海博士-《數據資源入表及數據資產化》-大數據百家講壇-廈門大學數據庫實驗室主辦第122期-杜海博士-《數據資源入表及數據資產化》-大數據百家講壇-廈門大學數據庫實驗室主辦-20240708_嗶哩嗶哩_bilibili

《A++ 敏捷開發》- 10 二八原則

團隊成員協作&#xff0c;利用項目數據&#xff0c;分析根本原因&#xff0c;制定糾正措施&#xff0c;并立馬嘗試&#xff0c;判斷是否有效&#xff0c;是改善的“基本功”。10-12章會探索里面的注意事項&#xff0c;13章會看兩家公司的實施情況和常見問題。 如果已經獲得高層…

Linq的常用方法

LINQ&#xff08;Language Integrated Query&#xff09;是.NET Framework中用于數據查詢的組件&#xff0c;它將查詢功能集成到C#等.NET語言中。LINQ提供了豐富的查詢操作符&#xff0c;這些操作符可以應用于各種數據源&#xff0c;如內存中的集合、數據庫、XML等。以下是一些…

java中的String 以及其方法(超詳細!!!)

文章目錄 一、String類型是什么String不可變的原因(經典面試題)String不可變的好處 二、String的常用構造形式1.使用常量串構造2.使用newString對象構造3.字符串數組構造 三、常用方法1. length() 獲取字符串的長度2. charAt() 獲取字符串中指定字符的值 (代碼單元)3. codePoin…

水的幾個科學問題及引發的思考

水的幾個科學問題及引發的思考 兩個相同的容器A和B&#xff0c;分別裝有同質量的水&#xff0c;然后&#xff0c;在A容器中加入水&#xff0c;在B容器中加入冰&#xff0c;如果加入水和冰的質量相同。問&#xff0c;容器B的水位將與容器A的水位相同嗎&#xff08;假設冰未融化時…

Log4j的原理及應用詳解(二)

本系列文章簡介&#xff1a; 在軟件開發的廣闊領域中&#xff0c;日志記錄是一項至關重要的活動。它不僅幫助開發者追蹤程序的執行流程&#xff0c;還在問題排查、性能監控以及用戶行為分析等方面發揮著不可替代的作用。隨著軟件系統的日益復雜&#xff0c;對日志管理的需求也日…

MySQL和SQlServer的區別

MySQL和SQlServer的區別 說明&#xff1a;在一些常用的SQL語句中&#xff0c;MySQL和SQLServer存在有一些區別&#xff0c;后續我也會將我遇到的不同點持續更新在這篇博客中。 1. 獲取當前時間 SQLServer&#xff1a; -- SQLServer -- 1.獲取當前時間 SELECT GETDATE(); --…

Vue2切換圖片小案例

代碼中 v-show "index>0",是表示下標只有大于零時上一頁按鈕才會顯示v-show "index<list.length-1",是表示下標只有小于list數組的最大值才會顯示&#xff0c;反之隱藏。click "index--"和click "index",是點擊按鈕后加減數…