最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript中DOM核心操作的實戰(zhàn)指南

 更新時間:2026年04月27日 09:28:23   作者:yingjuxia.com  
本文詳細(xì)介紹了JavaScript中DOM元素操作的實戰(zhàn)指南,從查找、創(chuàng)建、修改、插入、刪除、屬性操作、事件綁定及遍歷等節(jié)點等常見操作入手,對比了各種方法的優(yōu)缺點,希望對大家有所幫助

JavaScript DOM 核心操作:從內(nèi)容到節(jié)點的實戰(zhàn)指南

(2025–2026 年仍然最常用的原生 DOM API 寫法與現(xiàn)代最佳實踐)

以下內(nèi)容按實際開發(fā)中最常用的操作順序組織,從查找 → 創(chuàng)建 → 修改 → 插入 → 刪除 → 屬性/樣式 → 事件 → 遍歷,并標(biāo)注常見陷阱與現(xiàn)代替代方案。

1. 查找節(jié)點(最常用 Top 10 方法)

優(yōu)先級方法說明返回值現(xiàn)代推薦場景性能備注
1document.querySelector(selector)CSS 選擇器,第一個匹配Element 或 null幾乎所有場景首選較慢但最靈活
2document.querySelectorAll(selector)所有匹配NodeList(靜態(tài))需要多個元素時首選靜態(tài)快照,不隨 DOM 變化
3element.querySelector(…)從某個元素開始查找Element 或 null局部查找,性能更好
4getElementById(id)通過 id,最快Element 或 null有明確 id 時首選最快
5getElementsByClassName(class)通過類名HTMLCollection(動態(tài))舊代碼常見,新代碼少用動態(tài)集合,慎用
6getElementsByTagName(tag)通過標(biāo)簽名HTMLCollection(動態(tài))少用動態(tài)集合
7element.closest(selector)向上查找最近的匹配祖先Element 或 null事件委托中非常常用非常實用
8element.matches(selector)判斷當(dāng)前元素是否匹配選擇器boolean事件委托判斷類型時用
9document.getElementsByName(name)通過 name 屬性(表單元素常見)NodeList極少用
10element.children只獲取直接子元素(不含文本節(jié)點)HTMLCollection常用于只關(guān)心元素子節(jié)點動態(tài)

2025–2026 推薦優(yōu)先級口訣id → querySelector → querySelectorAll → closest → children

2. 創(chuàng)建與克隆節(jié)點

// 創(chuàng)建元素
const div = document.createElement('div');
div.textContent = 'Hello';
div.className = 'box active';
div.dataset.id = '123';

// 創(chuàng)建文本節(jié)點(最常用)
const text = document.createTextNode('純文本內(nèi)容');

// 克隆節(jié)點(深度克隆最常用)
const clone = original.cloneNode(true);   // true = 深克?。ò庸?jié)點)
const shallow = original.cloneNode(false); // 只克隆自身

3. 修改內(nèi)容(四種主流方式對比)

方法修改方式是否解析 HTML會清除原有事件監(jiān)聽?推薦場景陷阱
element.innerHTML替換全部內(nèi)容需要插入 HTML 結(jié)構(gòu)時XSS 風(fēng)險、性能差、丟失事件
element.textContent純文本最推薦(安全、高性能)不會解析標(biāo)簽
element.innerText考慮 CSS 顯示的文本需要考慮樣式隱藏的內(nèi)容性能最差(會重排)
element.insertAdjacentHTML(position, html)在指定位置插入 HTML否(只影響新內(nèi)容)局部插入 HTML 時最佳仍需防范 XSS

位置參數(shù)(insertAdjacent* 方法通用):

  • 'beforebegin' → 元素前面
  • 'afterbegin' → 元素內(nèi)部最前面
  • 'beforeend' → 元素內(nèi)部最后面(最常用)
  • 'afterend' → 元素后面

4. 插入節(jié)點(現(xiàn)代最推薦的 5 種方式)

// 方式1:最常用、最直觀(2020年后主流)
parent.append(child);           // 末尾添加(可多個)
parent.prepend(child);          // 開頭添加
parent.before(child);           // 兄弟前插入
parent.after(child);            // 兄弟后插入

// 方式2:經(jīng)典但已被取代
parent.appendChild(child);      // 只支持一個節(jié)點
parent.insertBefore(newNode, referenceNode);

// 方式3:批量插入(性能最好)
const fragment = document.createDocumentFragment();
fragment.append(div1, div2, div3);   // 不會引起多次重排
parent.appendChild(fragment);        // 一次性插入

5. 刪除 & 清空節(jié)點

// 刪除自身(最常用)
element.remove();                    // 現(xiàn)代首選

// 舊方式(仍兼容)
parent.removeChild(element);

// 清空所有子節(jié)點(三種方式對比)
element.innerHTML = '';              // 最快,但有 XSS 風(fēng)險
while (element.firstChild) {
  element.removeChild(element.firstChild);
}
element.replaceChildren();           // 現(xiàn)代最推薦(2020+),干凈、高效

6. 屬性操作(attr vs property)

操作類型方法/屬性適用場景注意事項
自定義屬性element.dataset.xxxdata-* 屬性自動駝峰轉(zhuǎn)換
classclassList.add/remove/toggle/contains/replaceclass 操作首選比 className 好用 100 倍
styleelement.style.color = 'red'行內(nèi)樣式優(yōu)先用 class 代替
通用屬性setAttribute / getAttribute / hasAttribute / removeAttributeHTML 屬性value、checked、disabled 等特殊
DOM 屬性element.value / checked / disabled表單元素的“當(dāng)前狀態(tài)”優(yōu)先使用 DOM 屬性而非 getAttribute

7. 事件綁定(現(xiàn)代寫法)

// 推薦寫法(2020+)
button.addEventListener('click', (e) => {
  // e.currentTarget vs e.target
  // e.preventDefault()
  // e.stopPropagation()
}, { once: true, passive: true });   // 優(yōu)化選項

// 事件委托(性能最佳)
document.addEventListener('click', (e) => {
  if (e.target.matches('.delete-btn')) {
    // 處理刪除
  }
});

// 移除事件(必須是同一個函數(shù)引用)
const handler = () => console.log('clicked');
btn.addEventListener('click', handler);
btn.removeEventListener('click', handler);

8. 遍歷節(jié)點(常用集合對比)

集合類型是否動態(tài)包含什么推薦遍歷方式
childNodes動態(tài)元素 + 文本 + 注釋for…of 或 for 循環(huán)
children動態(tài)只元素for…of 或 for 循環(huán)
querySelectorAll靜態(tài)只元素forEach / for…of
NodeList(部分)部分動態(tài)

9.2025–2026 高頻面試 + 真實項目避坑點

  1. innerHTML vs textContent vs insertAdjacentHTML 的 XSS 風(fēng)險對比
  2. appendChild vs append 的參數(shù)差異(append 支持多個 + 字符串)
  3. 事件委托中 e.target vs e.currentTarget vs this 的區(qū)別
  4. className = ' ' 會清空所有 class,推薦用 classList
  5. dataset 屬性自動駝峰:data-user-id → element.dataset.userId
  6. Fragment 批量插入 vs 多次 appendChild 的性能差距(可達(dá) 10–100 倍)
  7. remove() 方法 IE 不支持(需 polyfill 或用 parent.removeChild)
  8. closest() 從自身開始找(包含自己)

需要哪一部分更詳細(xì)的完整示例代碼(如:動態(tài)表格增刪改查、拖拽排序、事件委托實現(xiàn) tab 切換、虛擬列表簡化版等),或者想看某個具體場景的對比寫法?可以告訴我,我再展開。

以上就是JavaScript中DOM核心操作的實戰(zhàn)指南的詳細(xì)內(nèi)容,更多關(guān)于JavaScript DOM操作的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論

祥云县| 四子王旗| 柏乡县| 文昌市| 吉首市| 浑源县| 西宁市| 安庆市| 闻喜县| 昌邑市| 丹江口市| 鹤岗市| 英德市| 榆中县| 隆子县| 安溪县| 百色市| 海城市| 会昌县| 桃园市| 灵璧县| 汉中市| 西青区| 武川县| 潮州市| 汕头市| 乐安县| 浦东新区| 廊坊市| 区。| 永城市| 乌鲁木齐市| 永兴县| 天峨县| 沙田区| 金乡县| 修武县| 武冈市| 陵川县| 德保县| 团风县|