JavaScript DOM與元素操作

目錄

DOM 樹、DOM 對象、元素操作

一、DOM 樹與 DOM 對象

二、獲取 DOM 元素

1.?基礎方法

2.?現代方法(ES6+)

三、修改元素內容

四、修改元素常見屬性

1.?標準屬性

2.?通用方法

五、通過?style?修改樣式

六、通過類名修改樣式

1.?className?屬性

2.?classList?方法(推薦)

七、獲取和設置表單的值

1.?輸入框(input、textarea)

2.?單選/復選框(radio、checkbox)

3.?下拉框(select)

八、自定義屬性(data-*)

1.?定義與訪問

2.?修改自定義屬性

示例:全選反選案例


DOM 樹、DOM 對象、元素操作

DOM(Document Object Model)是瀏覽器將 HTML 或 XML 文檔解析為?樹形結構?的編程接口,開發者可通過 JavaScript 動態操作網頁內容、結構和樣式。


一、DOM 樹與 DOM 對象

  1. DOM 樹

    • 定義:瀏覽器將 HTML 文檔解析為?樹形結構?的層級模型,每個 HTML 標簽、屬性、文本都對應樹中的節點。

    • 結構:包含根節點(document)、元素節點、文本節點、屬性節點等。

    • 作用:提供編程接口,讓 JavaScript 動態操作網頁內容。

  2. DOM 對象

    • 定義:DOM 樹中的每個節點都是一個?對象,擁有屬性和方法。

    • 類型

      • Element:元素節點(如?<div>)。

      • Text:文本節點。

      • Attr:屬性節點。

      • Document:整個文檔的入口。

  3. DOM 樹示例

<!DOCTYPE html>
<html><head><title>DOM 示例</title></head><body><h1>標題</h1><p class="content">段落</p></body>
</html>
document
├── html (元素節點)
│   ├── head (元素節點)
│   │   └── title (元素節點)
│   │       └── "DOM 示例" (文本節點)
│   └── body (元素節點)
│       ├── h1 (元素節點)
│       │   └── "標題" (文本節點)
│       └── p (元素節點)
│           ├── class="content" (屬性節點)
│           └── "段落" (文本節點)
└── ...

二、獲取 DOM 元素

1.?基礎方法

方法返回類型示例
document.getElementById()單個元素document.getElementById("box")
document.getElementsByClassName()HTMLCollection(動態)document.getElementsByClassName("item")
document.getElementsByTagName()HTMLCollection(動態)document.getElementsByTagName("div")

2.?現代方法(ES6+)

方法返回類型示例
document.querySelector()單個元素document.querySelector(".container")
document.querySelectorAll()NodeList(靜態)document.querySelectorAll("li")

區別

  • 動態集合(如?HTMLCollection):元素變化時自動更新。

    const items = document.getElementsByClassName("item");
    console.log(items.length); // 假設初始為 2
    document.body.appendChild(document.createElement("div")); // 動態集合長度自動更新
    console.log(items.length); // 3
  • 靜態集合(如?NodeList):查詢后不再更新。

    const list = document.querySelectorAll("li");
    console.log(list.length); // 假設初始為 3
    document.body.appendChild(document.createElement("li")); 
    console.log(list.length); // 仍為 3

三、修改元素內容

屬性/方法說明示例
innerHTML獲取或設置元素的 HTML 內容(解析標簽)element.innerHTML = "<b>加粗</b>"
textContent獲取或設置元素的文本內容(不解析標簽)element.textContent = "純文本"
innerText獲取可見文本(考慮樣式,性能較低)element.innerText = "可見文本"

注意

  • innerHTML?可能引發 XSS 攻擊(避免插入未經驗證的用戶輸入)。

  • textContent?性能優于?innerText


四、修改元素常見屬性

方法說明示例
getAttribute()獲取屬性值element.getAttribute("href")
setAttribute()設置屬性值element.setAttribute("class", "active")
removeAttribute()刪除屬性element.removeAttribute("disabled")
直接訪問屬性通過元素屬性名快速訪問(部分屬性需特殊處理)element.id = "newId"

1.?標準屬性

直接通過 DOM 對象屬性操作:

element.id = "newId";          // 修改 id
element.className = "active";  // 修改 class(覆蓋原有類)
element.href = "https://example.com"; // 修改鏈接

2.?通用方法

element.setAttribute("屬性名", "值");  // 設置屬性
element.getAttribute("屬性名");       // 獲取屬性
element.removeAttribute("屬性名");    // 刪除屬性

示例

const img = document.querySelector("img");
img.setAttribute("src", "new-image.jpg");
img.removeAttribute("alt");

五、通過?style?修改樣式

方法說明示例
style?屬性修改內聯樣式element.style.color = "red"
classList操作類名(添加、刪除、切換)element.classList.add("active")
window.getComputedStyle()獲取最終計算的樣式(包括外部 CSS)getComputedStyle(element).fontSize

直接操作元素的?style?屬性(修改內聯樣式):

element.style.color = "red";            // 單個樣式
element.style.backgroundColor = "#fff"; // 駝峰命名
element.style.cssText = "color: red; font-size: 16px;"; // 批量設置

注意

  • 修改?style?只影響內聯樣式,優先級高于外部 CSS。

  • 頻繁操作?style?可能觸發重繪(性能敏感時需優化)。


六、通過類名修改樣式

1.?className?屬性

直接覆蓋所有類名:

element.className = "class1 class2"; // 覆蓋原有類

2.?classList?方法(推薦)

精細控制類名:

element.classList.add("new-class");     // 添加類
element.classList.remove("old-class");  // 刪除類
element.classList.toggle("active");     // 切換類(存在則刪除,否則添加)
element.classList.contains("active");   // 檢查是否包含類

優勢

  • 避免覆蓋其他類名。

  • 支持鏈式調用:element.classList.add("a").remove("b")


七、獲取和設置表單的值

1.?輸入框(inputtextarea

const input = document.querySelector("input");
// 獲取值
console.log(input.value);
// 設置值
input.value = "新內容";

2.?單選/復選框(radiocheckbox

const checkbox = document.querySelector("input[type=checkbox]");
// 獲取選中狀態
console.log(checkbox.checked); // true/false
// 設置選中狀態
checkbox.checked = true;

3.?下拉框(select

const select = document.querySelector("select");
// 獲取選中值
console.log(select.value);
// 設置選中值
select.value = "option2";

八、自定義屬性(data-*

1.?定義與訪問

HTML 中定義自定義屬性:

<div id="user" data-id="123" data-user-name="Alice"></div>

JavaScript 通過?dataset?訪問:

const user = document.getElementById("user");
console.log(user.dataset.id);          // "123"
console.log(user.dataset.userName);    // "Alice"(駝峰命名轉換)

2.?修改自定義屬性

user.dataset.id = "456";            // 修改 data-id
user.dataset.userRole = "admin";    // 添加 data-user-role
delete user.dataset.userName;       // 刪除 data-user-name

注意

  • 屬性名需符合?data-*?格式。

  • dataset?會自動將短橫線命名轉為駝峰式(如?data-user-name?→?userName)。


示例:全選反選案例

<body><table><tr><th class="allCheck"><input type="checkbox" name="" id="checkAll"> <span class="all">全選</span></th><th>商品</th><th>商家</th><th>價格</th></tr><tr><td><input type="checkbox" name="check" class="ck"></td><td>小米手機</td><td>小米</td><td>¥1999</td></tr><tr><td><input type="checkbox" name="check" class="ck"></td><td>小米凈水器</td><td>小米</td><td>¥4999</td></tr><tr><td><input type="checkbox" name="check" class="ck"></td><td>小米電視</td><td>小米</td><td>¥5999</td></tr></table><script>const checkAll = document.querySelector('#checkAll')const checks = document.querySelectorAll('.ck')checkAll.addEventListener('click', function () {for (let i = 0; i < checks.length; i++) {checks[i].checked = checkAll.checked}})for (let i = 0; i < checks.length; i++) {checks[i].addEventListener('click', function () {checkAll.checked = document.querySelectorAll('.ck:checked').length === checks.length})}</script>
</body>

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

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

相關文章

單元測試的編寫

Python 單元測試示例 在 Python 中&#xff0c;通常使用 unittest 模塊來編寫單元測試。以下是一個簡單的示例&#xff1a; 示例代碼&#xff1a;calculator.py # calculator.py def add(a, b):return a bdef subtract(a, b):return a - b 單元測試代碼&#xff1a;test_c…

大模型學習:從零到一實現一個BERT微調

目錄 一、準備階段 1.導入模塊 2.指定使用的是GPU還是CPU 3.加載數據集 二、對數據添加詞元和分詞 1.根據BERT的預訓練&#xff0c;我們要將一個句子的句頭添加[CLS]句尾添加[SEP] 2.激活BERT詞元分析器 3.填充句子為固定長度 代碼解釋&#xff1a; 三、數據處理 1.…

10組時尚復古美學自然冷色調肖像電影照片調色Lightroom預設 De La Mer – Nautical Lightroom Presets

De La Mer 預設系列包含 10 種真實的調色預設&#xff0c;適用于肖像、時尚和美術。為您的肖像攝影帶來電影美學和個性&#xff01; De La Mer 預設非常適合專業人士和業余愛好者&#xff0c;可在桌面或移動設備上使用&#xff0c;為您的攝影項目提供輕松的工作流程。這套包括…

SDL多窗口多線程渲染技術解析

SDL多窗口多線程渲染技術解析 技術原理 SDL多線程模型與窗口管理 SDL通過SDL_Thread結構體實現跨平臺線程管理。在多窗口場景中,每個窗口需關聯獨立的渲染器,且建議遵循以下原則: 窗口與渲染器綁定:每個窗口創建時生成專屬渲染器(SDL_CreateRenderer),避免跨線程操作…

QT 跨平臺發布指南

一、Windows 平臺發布 1. 使用 windeployqt 工具 windeployqt --release --no-compiler-runtime your_app.exe 2. 需要包含的文件 應用程序 .exe 文件 Qt5Core.dll, Qt5Gui.dll, Qt5Widgets.dll 等 Qt 庫 platforms/qwindows.dll 插件 styles/qwindowsvistastyle.dll (如果使…

L2-037 包裝機 (分數25)(詳解)

題目鏈接——L2-037 包裝機 問題分析 這個題目就是模擬了物品在傳送帶和筐之間的傳送過程。傳送帶用隊列模擬&#xff0c;筐用棧模擬。 輸入 3 4 4 GPLT PATA OMSA 3 2 3 0 1 2 0 2 2 0 -1輸出 根據上述操作&#xff0c;輸出的物品順序是&#xff1a; MATA樣例分析 初始…

機器學習的一百個概念(4)下采樣

前言 本文隸屬于專欄《機器學習的一百個概念》&#xff0c;該專欄為筆者原創&#xff0c;引用請注明來源&#xff0c;不足和錯誤之處請在評論區幫忙指出&#xff0c;謝謝&#xff01; 本專欄目錄結構和參考文獻請見[《機器學習的一百個概念》 ima 知識庫 知識庫廣場搜索&…

qt6下配置qopengl

qt部件選擇 Qt 6&#xff1a;需要手動選擇 Qt Shader Tools 和 Qt 5 Compatibility Module&#xff08;如果需要兼容舊代碼&#xff09; cmake文件 cmake_minimum_required(VERSION 3.16) # Qt6 推薦最低 CMake 3.16 project(myself VERSION 0.1 LANGUAGES CXX)set(CMAKE_A…

數據安全系列4:密碼技術的應用-接口調用的身份識別

傳送門 數據安全系列1&#xff1a;開篇 數據安全系列2&#xff1a;單向散列函數概念 數據安全系列3&#xff1a;密碼技術概述 什么是認證&#xff1f; 一談到認證&#xff0c;多數人的反應可能就是"用戶認證" 。就是應用系統如何識別用戶的身份&#xff0c;直接…

STL之map和set

1. 關聯式容器 vector、list、deque、 forward_list(C11)等&#xff0c;這些容器統稱為序列式容器&#xff0c;因為其底層為線性序列的數據結構&#xff0c;里面存儲的是元素本身。 關聯式容器也是用來存儲數據的&#xff0c;與序列式容器不同的是&#xff0c;其里面存儲的是結…

Vue3 其它API Teleport 傳送門

Vue3 其它API Teleport 傳送門 在定義一個模態框時&#xff0c;父組件的filter屬性會影響子組件的position屬性&#xff0c;導致模態框定位錯誤使用Teleport解決這個問題把模態框代碼傳送到body標簽下

C++練習

1.將File練習題&#xff0c;內部的FILE*描述符&#xff0c;改成int描述符 2。寫一個類Fifo管道類。提高難度&#xff0c;什么都不提示。只要求&#xff1a;使用自己編寫的Fifo類對象&#xff0c;實現2個終端之間互相聊天 file.cpp #include <iostream> #include <c…

《Python Web網站部署應知應會》No4:基于Flask的調用AI大模型的高性能博客網站的設計思路和實戰(上)

基于Flask的調用AI大模型的高性能博客網站的設計思路和實戰&#xff08;上&#xff09; 摘要 本文詳細探討了一個基于Flask框架的高性能博客系統的設計與實現&#xff0c;該系統集成了本地AI大模型生成內容的功能。我們重點關注如何在高并發、高負載狀態下保持系統的高性能和…

實現一個簡易版的前端監控 SDK

【簡易版的前端監控系統】 1、Promise的錯誤如何監控&#xff1f;–promise不是所有都是接口請求 2、接口的報錯如何監控&#xff1f;–全局監控sdk&#xff0c;不改動公共的請求方法、不改動業務代碼&#xff1b;一般接口使用axios請求 3、資源的報錯如何監控&#xff1f; 4、…

【操作系統】軟中斷vs硬中斷

在操作系統中&#xff0c;中斷&#xff08;Interrupt&#xff09; 是 CPU 響應外部事件的重要機制&#xff0c;分為 硬中斷&#xff08;Hardware Interrupt&#xff09; 和 軟中斷&#xff08;Software Interrupt&#xff09;。它們的核心區別在于 觸發方式 和 處理機制。 1. 硬…

力扣刷題-熱題100題-第27題(c++、python)

21. 合并兩個有序鏈表 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/merge-two-sorted-lists/description/?envTypestudy-plan-v2&envIdtop-100-liked 常規法 創建一個新鏈表&#xff0c;遍歷list1與list2&#xff0c;將新鏈表指向list1與list2…

Python包下載路徑 Chrome用戶數據 修改到非C盤

查看 site-packages 是否能通過命令行完成&#xff1f; 可以&#xff0c;使用以下命令&#xff08;不需寫腳本&#xff09;&#xff1a; python -m site輸出包含&#xff1a; sys.path site-packages 路徑&#xff08;全局和用戶級&#xff09; 如果只想看安裝路徑&#…

【鴻蒙5.0】鴻蒙登錄界面 web嵌入(隱私頁面加載)

在鴻蒙應用中嵌入 Web 頁面并加載隱私頁面&#xff0c;可借助 WebView 組件來實現。以下是一個完整示例&#xff0c;展示如何在鴻蒙 ArkTS 里嵌入 Web 頁面并加載隱私政策頁面。 在 HarmonyOS 應用開發中&#xff0c;如果你希望嵌入一個網頁&#xff0c;并且特別關注隱私頁面加…

AI加Python的文本數據情感分析流程效果展示與代碼實現

本文所使用數據來自于梯田景區評價數據。 一、數據預處理 數據清洗 去除重復值、空值及無關字符(如表情符號、特殊符號等)。 提取中文文本,過濾非中文字符。 統一文本格式(如全角轉半角、繁體轉簡體)。 中文分詞與去停用詞 使用 jieba 分詞工具進行分詞。 加載自定義詞…

Microi吾碼界面設計引擎之基礎組件用法大全【內置組件篇·上】

&#x1f380;&#x1f380;&#x1f380; microi-pageengine 界面引擎系列 &#x1f380;&#x1f380;&#x1f380; 一、Microi吾碼&#xff1a;一款高效、靈活的低代碼開發開源框架【低代碼框架】 二、Vue3項目快速集成界面引擎 三、Vue3 界面設計插件 microi-pageengine …