【js面試題】深入理解DOM操作:創建、查詢、更新、添加和刪除節點

面試題:DOM常見的操作有哪些

引言:
在前端開發中,DOM(文檔對象模型)操作是日常工作中不可或缺的一部分。DOM提供了一種以編程方式訪問和更新文檔內容、結構和樣式的接口。
任何htmlxml 文檔都可以用dom表示為一個由節點構成的層級結構

<div><p title="title">content</p >
</div>

上述結構中 div、p就是元素的節點 content就是文本的節點,title就是屬性節點

本文將詳細介紹DOM操作的五個基本方面:創建節點、查詢節點、更新節點、添加節點和刪除節點,并提供相應的代碼示例。

一、創建節點

來源: DOM API允許開發者動態地創建新的HTML元素,并將其添加到文檔中。
應用場景: 動態生成內容,如表單驗證消息、動態加載的列表項等。
創建節點是DOM操作中非常基礎且常用的操作之一。在JavaScript中,我們可以通過document.createElement方法來創建一個新的元素節點。下面是一些創建節點的詳細例子,包括創建不同類型的節點和設置它們的屬性。

創建元素節點

// 創建一個新的div元素
let newDiv = document.createElement('div');// 創建一個新的段落元素
let newParagraph = document.createElement('p');// 創建一個新的列表項元素
let newListItem = document.createElement('li');

創建文本節點

// 創建一個文本節點
let textNode = document.createTextNode('這是一個文本節點');

創建注釋節點

// 創建一個注釋節點
let commentNode = document.createComment('這是一個注釋');

創建屬性節點

// 創建一個屬性節點
let classAttribute = document.createAttribute('class');
classAttribute.value = 'my-class';

創建文檔片段節點

文檔片段節點是DOM操作中一個非常有用的工具,它允許開發者以一種高效的方式處理DOM元素

// 創建一個文檔片段節點
let docFragment = document.createDocumentFragment();

擴展

創建多個元素節點并設置屬性

// 創建多個元素節點并設置屬性
let list = document.createElement('ul');
for (let i = 1; i <= 5; i++) {let listItem = document.createElement('li');listItem.textContent = '列表項 ' + i;list.appendChild(listItem);
}

創建節點并添加到文檔中

// 創建一個div元素并添加到body中
let newDiv = document.createElement('div');
document.body.appendChild(newDiv);

創建節點是構建動態網頁和應用的基礎,通過這些節點,我們可以構建出復雜的用戶界面和交互邏輯。

二、查詢節點

來源: DOM提供了多種方法來查詢文檔中的節點,如getElementByIdgetElementsByTagNamequerySelector等。
應用場景: 獲取頁面元素以進行進一步操作,如事件綁定、樣式修改等。

querySelector

querySelector 方法返回文檔中匹配指定CSS選擇器的第一個元素。如果沒有找到匹配的元素,則返回 null

用法:

element = document.querySelector(selectors);

參數:

  • selectors:一個字符串,包含一個或多個CSS選擇器,用于指定要返回的元素。

代碼用例:

// 獲取頁面中第一個id為"myElement"的元素
var element = document.querySelector('#myElement');
console.log(element); // 輸出匹配的元素// 獲取頁面中第一個類名為"myClass"的元素
var element = document.querySelector('.myClass');
console.log(element); // 輸出匹配的元素// 獲取頁面中第一個具有特定類名和id的元素
var element = document.querySelector('.myClass#myElement');
console.log(element); // 輸出匹配的元素

querySelectorAll

querySelectorAll 方法返回文檔中匹配指定CSS選擇器的所有元素的靜態(不實時更新) NodeList 集合。

用法:

elements = document.querySelectorAll(selectors);

參數:

  • selectors:一個字符串,包含一個或多個CSS選擇器,用于指定要返回的元素集合。

代碼用例:

// 獲取頁面中所有類名為"myClass"的元素
var elements = document.querySelectorAll('.myClass');
console.log(elements); // 輸出匹配的元素集合// 獲取頁面中所有具有特定類名和id的元素
var elements = document.querySelectorAll('.myClass#myElement');
console.log(elements); // 輸出匹配的元素集合// 遍歷所有匹配的元素
elements.forEach(function(element) {console.log(element); // 輸出每個匹配的元素
});

querySelectorquerySelectorAll 是非常強大的工具,它們允許開發者使用CSS選擇器來查詢DOM元素。querySelector 返回第一個匹配的元素,而 querySelectorAll 返回所有匹配的元素。

三、更新節點

來源: DOM允許開發者修改已存在的節點內容或屬性。
應用場景: 更新頁面上的動態內容,如實時顯示時間、更新用戶狀態等。
在JavaScript中,更新DOM節點的內容和樣式是常見的操作。innerHTMLinnerTexttextContentstyle屬性是用于更新節點內容和樣式的常用方法。下面將分別介紹這些屬性的概念和代碼用例。

innerHTML

innerHTML屬性用于獲取或設置指定元素的HTML內容。它返回元素內部的HTML標記,如果設置,則會替換元素內的所有內容。

代碼用例:

// 獲取元素的HTML內容
var content = document.getElementById('myElement').innerHTML;
console.log(content); // 輸出元素的HTML內容// 設置元素的HTML內容
document.getElementById('myElement').innerHTML = '<p>新的內容</p>';

innerText

innerText屬性用于獲取或設置指定元素及其子元素的文本內容。它返回元素內的純文本,忽略所有HTML標簽,如果設置,則會替換元素內的所有文本內容。

代碼用例:

// 獲取元素的文本內容
var text = document.getElementById('myElement').innerText;
console.log(text); // 輸出元素的文本內容// 設置元素的文本內容
document.getElementById('myElement').innerText = '新的文本內容';

textContent

textContent屬性用于獲取或設置指定元素及其子元素的文本內容。與innerText類似,它返回元素內的純文本,但不會忽略腳本和樣式元素。如果設置,則會替換元素內的所有文本內容。

代碼用例:

// 獲取元素的文本內容
var text = document.getElementById('myElement').textContent;
console.log(text); // 輸出元素的文本內容// 設置元素的文本內容
document.getElementById('myElement').textContent = '新的文本內容';

style

style屬性用于獲取或設置指定元素的樣式。通過這個屬性,可以訪問和修改元素的內聯樣式。

代碼用例:

// 獲取元素的樣式屬性
var style = document.getElementById('myElement').style;
console.log(style.color); // 輸出元素的文本顏色// 設置元素的樣式屬性
document.getElementById('myElement').style.color = 'red';
document.getElementById('myElement').style.fontSize = '20px';

結論

innerHTMLinnerTexttextContentstyle屬性是更新DOM節點內容和樣式的強大工具。innerHTMLinnerText用于獲取和設置元素的文本內容,但它們處理HTML的方式不同。textContent提供了一種獲取和設置純文本內容的方法,而style屬性允許開發者直接修改元素的樣式。

四、添加節點

來源: DOM提供了方法來將新創建或查詢到的節點添加到文檔的特定位置。
應用場景: 在頁面中動態插入新內容,如評論、廣告等。
在JavaScript中,向DOM中添加節點是通過一系列方法實現的。innerHTMLinsertBeforesetAttributeappendChild是其中一些常用的方法。下面將分別介紹這些方法的概念和代碼用例。

innerHTML

innerHTML屬性用于獲取或設置指定元素的HTML內容。雖然它主要用于獲取和設置內容,但也可以用來添加新內容,因為它會替換掉元素內的所有內容。

insertBefore

insertBefore方法用于在指定的父節點的子節點列表中的某個節點之前插入一個新的節點。它需要兩個參數:要插入的新節點和參照節點。

代碼用例:

// 獲取父節點和要插入的新節點
var parent = document.getElementById('parentElement');
var newNode = document.createElement('p');
newNode.textContent = '這是新添加的段落。';// 獲取參照節點
var referenceNode = document.getElementById('referenceElement');// 在參照節點之前插入新節點
parent.insertBefore(newNode, referenceNode);

setAttribute

setAttribute方法用于設置指定元素的屬性值。它需要兩個參數:要設置的屬性名和屬性值。

代碼用例:

// 獲取元素
var element = document.getElementById('myElement');// 設置元素的class屬性
element.setAttribute('class', 'new-class');

appendChild

appendChild方法用于將一個節點添加到指定父節點的子節點列表的末尾。它只接受一個參數:要添加的新節點。

代碼用例:

// 獲取父節點和要添加的新節點
var parent = document.getElementById('parentElement');
var newNode = document.createElement('p');
newNode.textContent = '這是新添加的段落。';// 將新節點添加到父節點的子節點列表末尾
parent.appendChild(newNode);

結論

innerHTMLinsertBeforesetAttributeappendChild是向DOM中添加節點的常用方法。innerHTML可以用來添加新內容,但會替換掉元素內的所有內容。insertBefore允許在特定位置插入新節點。setAttribute用于設置元素的屬性值。appendChild則將新節點添加到父節點的子節點列表末尾。

五、刪除節點

來源: DOM提供了方法來從文檔中移除節點。
應用場景: 清除不再需要的內容,如刪除表單中的錯誤消息、移除已處理的列表項等。
代碼示例:

// 刪除指定的節點
parentElement.removeChild(newDiv);

結語:

掌握DOM操作是前端開發的基礎技能之一。通過創建、查詢、更新、添加和刪除節點,我們可以靈活地控制頁面內容和結構。在實際開發中,合理運用這些操作可以極大地提升用戶體驗和頁面的交互性。希望本文的介紹和示例能夠幫助你更好地理解和運用DOM操作。

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

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

相關文章

KIVY Button?

Button — Kivy 2.3.0 documentation Button Jump to API ? Module: kivy.uix.button Added in 1.0.0 The Button is a Label with associated actions that are triggered when the button is pressed (or released after a click/touch). To configure the button, the s…

【論文速讀】| 用于安全漏洞防范的人工智能技術

本次分享論文&#xff1a;Artificial Intelligence Techniques for Security Vulnerability Prevention 基本信息 原文作者&#xff1a;Steve Kommrusch 作者單位&#xff1a;Colorado State University, Department of Computer Science, Fort Collins, CO, 80525 USA 關鍵…

ISO/OSI七層模型

ISO:國際標準化/ OSI:開放系統互聯 七層協議必背圖 1.注意事項&#xff1a; 1.上三層是為用戶服務的&#xff0c;下四層負責實際數據傳輸。 2.下四層的傳輸單位&#xff1a; 傳輸層&#xff1b; 數據段&#xff08;報文&#xff09; 網絡層&#xff1a; 數據包&#xff08;報…

1Panel安裝命令腳本大全,多Linux操作系統版本

1Panel安裝命令腳本大全&#xff0c;包括RedHat、CentOS、Ubuntu、Debian和openEuler等linux操作系統&#xff0c;碼筆記整理1Panel安裝命令腳本清單&#xff1a; RedHat/CentOS安裝命令&#xff1a; curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh…

【Swoole 的生命周期,文件描述符,協程數量,以及默認值】

目錄 Swoole 的生命周期 Swoole 文件描述符&#xff08;FD&#xff09;緩存 Swoole設置協程的數量 Swoole 默認值 Swoole 是一個基于 PHP 的高性能網絡通信引擎&#xff0c;它采用 C 編寫&#xff0c;提供了協程和高性能的網絡編程支持。Swoole 支持多種網絡服務器和客戶端…

python庫 - modelscope

ModelScope 是一個集成的機器學習模型庫&#xff0c;旨在簡化機器學習模型的使用流程&#xff0c;提供多種預訓練模型&#xff0c;涵蓋計算機視覺、自然語言處理、語音識別等多個領域。用戶可以輕松訪問、使用和分享各種預訓練的機器學習模型&#xff0c;無需從頭開始訓練模型&…

Vue項目openlayers中使用jsts處理wkt和geojson的交集-(geojson來源zpi解析)

Vue項目openlayers中使用jsts處理wkt和geojson的交集-(geojson來源zpi解析) 讀取壓縮包中的shape看上一篇筆記&#xff1a;Vue項目讀取zip中的ShapeFile文件&#xff0c;并解析為GeoJson openlayers使用jsts官方示例&#xff1a;https://openlayers.org/en/latest/examples/j…

框選table單元格,高亮展示

td單元格內&#xff0c;有未知層dom結構 <style>.highlight {background-color: yellow;} </style> <table id"myTable"><colgroup><col style"background-color: lightblue;"><col style"background-color: light…

#pragma 指令

#pragma 指令作用是設定編譯器的狀態或者是指示編譯器完成一些特定的動作 message 參數能夠在編譯信息輸出窗口中輸出相應的信息 #pragma message(“消息文本”) code_seg參數能夠設置程序中函數代碼存放的代碼段&#xff0c;當我們開發驅動程序的時候就會使用到它 #pragma…

科技創新引領水利行業升級:深入分析智慧水利解決方案的核心價值,展望其在未來水資源管理中的重要地位與作用

目錄 引言 一、智慧水利的概念與內涵 二、智慧水利解決方案的核心價值 1. 精準監測與預警 2. 優化資源配置 3. 智能運維管理 4. 公眾參與與決策支持 三、智慧水利在未來水資源管理中的重要地位與作用 1. 推動水利行業轉型升級 2. 保障國家水安全 3. 促進生態文明建設…

下降npm版本

Node版本與NPM版本對應關系 Node版本與NPM版本對應關系_node對應npm版本-CSDN博客 要降低npm的版本&#xff0c;可以按照以下步驟進行操作 1.首先&#xff0c;打開終端或命令提示符窗口。 2.輸入以下命令來檢査當前安裝的npm版本: npm -v 3.如果你想要降低npm的版本&#xff…

vb.netcad二開自學筆記5:ActiveX鏈接CAD的.net寫法

一、必不可少的對象引用 使用activex需要在項目屬性中勾選以下兩個引用&#xff0c;若找不到&#xff0c;則瀏覽定位直接添加下面兩個文件&#xff0c;可以看到位于cad的安裝路徑下&#xff0c;圖中的3個mgd.dll也可以勾選。 C:\Program Files\Autodesk\AutoCAD 2024\Autodes…

實戰 | YOLOv8使用TensorRT加速推理教程(步驟 + 代碼)

導 讀 本文主要介紹如何使用TensorRT加速YOLOv8模型推理的詳細步驟與演示。 YOLOv8推理加速的方法有哪些? YOLOv8模型推理加速可以通過多種技術和方法實現,下面是一些主要的策略: 1. 模型結構優化 網絡剪枝:移除模型中不重要的神經元或連接,減少模型復雜度。 模型精…

中文大模型基準測評2024上半年報告

中文大模型基準測評2024上半年報告 原創 SuperCLUE CLUE中文語言理解測評基準 2024年07月09日 18:09 浙江 SuperCLUE團隊 2024/07 背景 自2023年以來&#xff0c;AI大模型在全球范圍內掀起了有史以來規模最大的人工智能浪潮。進入2024年&#xff0c;全球大模型競爭態勢日益加…

Obsidian 文檔編輯器

Obsidian是一款功能強大的筆記軟件 Download - Obsidian

降Compose十八掌之『見龍在田』| Modifier

公眾號「稀有猿訴」 原文鏈接 降Compose十八掌之『見龍在田』| Modifier 通過前面的文章我們學會了如何使用元素來構建和填充我們的UI頁面&#xff0c;但這只完成了一半&#xff0c;元素還需要裝飾&#xff0c;以及進行動畫和事件響應&#xff0c;這才能生成完整的UI。這…

2.5章節python中布爾類型

在Python中&#xff0c;布爾類型&#xff08;Boolean type&#xff09;用于表示真&#xff08;True&#xff09;或假&#xff08;False&#xff09;的值。這是編程中非常基礎且重要的一個概念&#xff0c;因為它允許程序進行條件判斷&#xff0c;從而根據條件執行不同的代碼塊。…

智慧校園行政辦公-紅頭文件功能概述

在智慧校園的行政辦公系統中&#xff0c;紅頭文件的管理功能是一項重要的組成部分&#xff0c;它極大地提升了文件處理的效率與規范性。該功能圍繞文件的創建、審批、歸檔等關鍵環節&#xff0c;進行了全面的數字化改造。 首先&#xff0c;系統內置了多種標準化的紅頭文件模板&…

一文實踐強化學習訓練游戲ai--doom槍戰游戲實踐

一文實踐強化學習訓練游戲ai–doom槍戰游戲實踐 上次文章寫道下載doom的環境并嘗試了簡單的操作&#xff0c;這次讓我們來進行對象化和訓練、驗證&#xff0c;如果你有基礎&#xff0c;可以直接閱讀本文&#xff0c;不然請你先閱讀Doom基礎知識&#xff0c;其中包含了下載、動作…

gsplat中的3D Gaussian Splatting as Markov Chain Monte Carlo的代碼解讀

總體 https://github.com/nerfstudio-project/gsplat simple_trainer_mcmc.py 2個關鍵點&#xff1a; 高斯狀態轉移&#xff08;每100iter調用&#xff09;高斯隨機過程&#xff08;每1iter調用&#xff09; relocate_gs 對 alive gs 進行采樣&#xff0c;被采樣的 alive…