欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript動(dòng)態(tài)獲取和修改DOM元素內(nèi)容的完整指南

 更新時(shí)間:2025年06月23日 09:06:02   作者:AllenBright  
在現(xiàn)代Web開發(fā)中,動(dòng)態(tài)獲取和修改DOM元素內(nèi)容是構(gòu)建交互式用戶界面的核心技能,無論是更新實(shí)時(shí)數(shù)據(jù)、創(chuàng)建動(dòng)態(tài)內(nèi)容還是響應(yīng)用戶交互,都離不開對DOM內(nèi)容的精確控制,本文將全面介紹JavaScript中操作DOM內(nèi)容的各種方法,需要的朋友可以參考下

1. DOM內(nèi)容操作基礎(chǔ)

1.1 innerHTML:強(qiáng)大的內(nèi)容操作屬性

innerHTML是最常用的DOM內(nèi)容操作屬性之一,它可以獲取或設(shè)置元素的HTML內(nèi)容:

const element = document.getElementById('myElement');

// 獲取HTML內(nèi)容
const content = element.innerHTML;
console.log(content); // 輸出元素內(nèi)的所有HTML字符串

// 設(shè)置HTML內(nèi)容
element.innerHTML = '<strong>新內(nèi)容</strong> <em>包含HTML標(biāo)簽</em>';

// 追加內(nèi)容
element.innerHTML += ' 追加的內(nèi)容';

特點(diǎn)

  • 可以解析HTML標(biāo)簽
  • 性能較高(瀏覽器優(yōu)化良好)
  • 會(huì)觸發(fā)重繪(repaint)
  • 存在XSS安全風(fēng)險(xiǎn)(需對用戶輸入進(jìn)行轉(zhuǎn)義)

1.2 textContent:純文本操作

當(dāng)不需要HTML解析時(shí),textContent是更安全的選擇:

// 獲取純文本內(nèi)容(忽略所有HTML標(biāo)簽)
const text = element.textContent;

// 設(shè)置純文本內(nèi)容(HTML標(biāo)簽會(huì)被轉(zhuǎn)義顯示)
element.textContent = '<strong>這段代碼會(huì)原樣顯示</strong>';

優(yōu)勢

  • 自動(dòng)轉(zhuǎn)義HTML標(biāo)簽,防止XSS攻擊
  • 性能略優(yōu)于innerHTML(不需要解析HTML)
  • 獲取時(shí)包含所有子元素的文本(包括隱藏元素)

1.3 innerText:樣式感知的文本獲取

innerTexttextContent類似,但有重要區(qū)別:

const text = element.innerText;

特點(diǎn)

  • 只返回"可見"文本(受CSS樣式影響)
  • 不返回<script><style>元素內(nèi)容
  • 會(huì)觸發(fā)重排(reflow)以計(jì)算布局
  • 不是標(biāo)準(zhǔn)屬性(但被所有現(xiàn)代瀏覽器支持)

對比表

屬性獲取內(nèi)容解析HTML性能注意
innerHTML包含HTML標(biāo)簽XSS風(fēng)險(xiǎn)
textContent純文本標(biāo)準(zhǔn)屬性
innerText可見文本非標(biāo)準(zhǔn)

2. 表單元素內(nèi)容操作

表單元素(input, textarea, select等)有特殊的屬性來操作內(nèi)容:

2.1 value屬性

const input = document.querySelector('input[type="text"]');

// 獲取值
const inputValue = input.value;

// 設(shè)置值
input.value = '新的輸入值';

2.2 特殊表單元素

textarea

const textarea = document.querySelector('textarea');
textarea.value = '多行文本內(nèi)容';

select

const select = document.querySelector('select');

// 獲取選中值
const selectedValue = select.value;

// 設(shè)置選中值
select.value = 'option2';

// 獲取選中項(xiàng)
const selectedOption = select.options[select.selectedIndex];

checkbox/radio

const checkbox = document.querySelector('input[type="checkbox"]');

// 獲取選中狀態(tài)
const isChecked = checkbox.checked;

// 設(shè)置選中狀態(tài)
checkbox.checked = true;

3. 高級內(nèi)容操作技巧

3.1 使用DocumentFragment高效批量操作

const fragment = document.createDocumentFragment();

for (let i = 0; i < 100; i++) {
  const li = document.createElement('li');
  li.textContent = `項(xiàng)目 ${i}`;
  fragment.appendChild(li);
}

document.getElementById('list').appendChild(fragment);

優(yōu)勢

  • 減少DOM操作次數(shù)
  • 避免多次重排和重繪
  • 提高性能(特別對大量元素)

3.2 使用模板字符串動(dòng)態(tài)生成內(nèi)容

const user = { name: '張三', age: 30 };

element.innerHTML = `
  <div class="user-card">
    <h2>${user.name}</h2>
    <p>年齡: ${user.age}</p>
    <p>注冊時(shí)間: ${new Date().toLocaleDateString()}</p>
  </div>
`;

3.3 使用insertAdjacentHTML精確控制插入位置

element.insertAdjacentHTML('beforebegin', '<p>在元素前插入</p>');
element.insertAdjacentHTML('afterbegin', '<p>在元素內(nèi)開頭插入</p>');
element.insertAdjacentHTML('beforeend', '<p>在元素內(nèi)末尾插入</p>');
element.insertAdjacentHTML('afterend', '<p>在元素后插入</p>');

位置參數(shù)

  • beforebegin:元素自身之前
  • afterbegin:元素內(nèi)部第一個(gè)子節(jié)點(diǎn)之前
  • beforeend:元素內(nèi)部最后一個(gè)子節(jié)點(diǎn)之后
  • afterend:元素自身之后

4. 內(nèi)容操作性能優(yōu)化

4.1 減少DOM操作次數(shù)

不佳實(shí)踐

// 多次操作DOM
for (let i = 0; i < 100; i++) {
  const div = document.createElement('div');
  document.body.appendChild(div);
}

優(yōu)化方案

// 單次操作DOM
const container = document.createElement('div');
for (let i = 0; i < 100; i++) {
  const div = document.createElement('div');
  container.appendChild(div);
}
document.body.appendChild(container);

4.2 使用事件委托減少內(nèi)容更新

// 而不是為每個(gè)元素添加監(jiān)聽器
document.getElementById('list').addEventListener('click', function(e) {
  if (e.target.tagName === 'LI') {
    e.target.textContent = '已點(diǎn)擊';
  }
});

4.3 使用requestAnimationFrame優(yōu)化動(dòng)畫內(nèi)容更新

function updateContent() {
  element.textContent = new Date().toLocaleTimeString();
  requestAnimationFrame(updateContent);
}

requestAnimationFrame(updateContent);

5. 安全注意事項(xiàng)

5.1 防范XSS攻擊

危險(xiǎn)做法

element.innerHTML = userProvidedContent; // 可能包含惡意腳本

安全做法

// 使用textContent
element.textContent = userProvidedContent;

// 或轉(zhuǎn)義HTML
function escapeHtml(unsafe) {
  return unsafe
    .replace(/&/g, "&amp;")
    .replace(/</g, "&lt;")
    .replace(/>/g, "&gt;")
    .replace(/"/g, "&quot;")
    .replace(/'/g, "&#039;");
}

element.innerHTML = escapeHtml(userProvidedContent);

5.2 使用現(xiàn)代API增強(qiáng)安全性

DOMPurify庫:

const clean = DOMPurify.sanitize(userProvidedContent);
element.innerHTML = clean;

Trusted Types API(現(xiàn)代瀏覽器):

if (window.trustedTypes && window.trustedTypes.createPolicy) {
  const escapePolicy = trustedTypes.createPolicy('myEscapePolicy', {
    createHTML: string => string.replace(/</g, '&lt;')
  });
  element.innerHTML = escapePolicy.createHTML(userProvidedContent);
}

6. 現(xiàn)代框架中的內(nèi)容操作

6.1 React中的內(nèi)容操作

function MyComponent() {
  const [content, setContent] = useState('初始內(nèi)容');

  return (
    <div>
      <div dangerouslySetInnerHTML={{__html: sanitizedContent}} />
      <button onClick={() => setContent('新內(nèi)容')}>更新</button>
    </div>
  );
}

6.2 Vue中的內(nèi)容操作

<template>
  <div v-html="sanitizedContent"></div>
  <button @click="content = '新內(nèi)容'">更新</button>
</template>

<script>
export default {
  data() {
    return {
      content: '初始內(nèi)容'
    }
  },
  computed: {
    sanitizedContent() {
      // 在這里實(shí)現(xiàn)凈化邏輯
      return this.content;
    }
  }
}
</script>

7. 總結(jié)與最佳實(shí)踐

DOM內(nèi)容操作是前端開發(fā)的基礎(chǔ)技能,正確使用這些技術(shù)可以創(chuàng)建動(dòng)態(tài)、交互式的Web應(yīng)用。以下是關(guān)鍵要點(diǎn)總結(jié):

選擇正確的屬性:

  • 需要HTML解析 → innerHTML
  • 純文本操作 → textContent
  • 表單元素 → value/checked等

性能優(yōu)化原則:

  • 減少DOM操作次數(shù)
  • 批量更新內(nèi)容
  • 使用文檔片段
  • 合理使用事件委托

安全第一:

  • 永遠(yuǎn)不要直接插入未凈化的用戶輸入
  • 優(yōu)先使用textContent而非innerHTML
  • 考慮使用DOMPurify等凈化庫

現(xiàn)代開發(fā):

  • 框架提供了更安全的內(nèi)容操作方式
  • 利用虛擬DOM減少直接操作
  • 遵循框架的最佳實(shí)踐

隨著Web平臺的不斷發(fā)展,DOM操作API也在持續(xù)演進(jìn)。掌握這些基礎(chǔ)技術(shù)將幫助您構(gòu)建更高效、更安全的Web應(yīng)用程序。

以上就是JavaScript動(dòng)態(tài)獲取和修改DOM元素內(nèi)容的完整指南的詳細(xì)內(nèi)容,更多關(guān)于JavaScript獲取和修改DOM內(nèi)容的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 使用20行JS代碼實(shí)現(xiàn)屏幕錄制功能

    使用20行JS代碼實(shí)現(xiàn)屏幕錄制功能

    在開發(fā)中可能有遇到過屏幕錄制的需求,無論是教學(xué)、演示還是游戲錄制,都需要通過屏幕錄制來記錄和分享內(nèi)容,MediaRecorder?是一種強(qiáng)大的技術(shù),可以在瀏覽器端實(shí)現(xiàn)屏幕錄制功能,本文將介紹如何使用JS?MediaRecorder?實(shí)現(xiàn)屏幕錄制,需要的朋友可以參考下
    2023-11-11
  • JavaScript編程的10+最佳實(shí)踐解決方案

    JavaScript編程的10+最佳實(shí)踐解決方案

    在現(xiàn)代Web開發(fā)中,JavaScript已經(jīng)成為無法替代的核心技術(shù),在現(xiàn)代Web開發(fā)中,JavaScript已經(jīng)成為無法替代的核心技術(shù),本文將通過代碼示例詳細(xì)介紹一些實(shí)踐解決方案,感興趣的同學(xué)可以參考下
    2023-06-06
  • 學(xué)會(huì)javascript之迭代器

    學(xué)會(huì)javascript之迭代器

    本文主要講解javascript之迭代器,在 JavaScript 中,迭代器是一個(gè)對象,它定義一個(gè)序列,并在終止時(shí)可能返回一個(gè)返回值。需要詳細(xì)了解相關(guān)知識的小伙伴可以參考一下這篇文章
    2021-09-09
  • Javascript基礎(chǔ)教程之比較null和undefined值

    Javascript基礎(chǔ)教程之比較null和undefined值

    這篇文章主要介紹了Javascript基礎(chǔ)教程之比較null和undefined值的相關(guān)知識,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧
    2016-05-05
  • 在百度知道團(tuán)隊(duì)中快速審批新成員的js腳本

    在百度知道團(tuán)隊(duì)中快速審批新成員的js腳本

    每天都有大量網(wǎng)友申請加入我的團(tuán)隊(duì),于是審核團(tuán)隊(duì)新成員成了一個(gè)費(fèi)力氣的活兒,在此情況下,我寫了個(gè)腳本,自動(dòng)計(jì)算他們的回答采納率,采納率低于20%的自動(dòng)打勾 選中,等級太低的人也自動(dòng)打勾選中
    2014-02-02
  • 前端js中的事件循環(huán)eventloop機(jī)制詳解

    前端js中的事件循環(huán)eventloop機(jī)制詳解

    這篇文章主要給大家介紹了關(guān)于前端js中事件循環(huán)eventloop機(jī)制的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用js具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Bootstrap的圖片輪播示例代碼

    Bootstrap的圖片輪播示例代碼

    Bootstrap 是一個(gè)用于快速開發(fā) Web 應(yīng)用程序和網(wǎng)站的前端框架。Bootstrap 是基于 HTML、CSS、JAVASCRIPT 的。本文給大家分享Bootstrap的圖片輪播示例代碼,小伙伴們快來圍觀吧。
    2015-08-08
  • 微信小程序自定義toast的實(shí)現(xiàn)代碼

    微信小程序自定義toast的實(shí)現(xiàn)代碼

    這篇文章主要介紹了微信小程序自定義toast的實(shí)現(xiàn)代碼,本文以toast為例通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-11-11
  • javascript 數(shù)據(jù)結(jié)構(gòu)的題

    javascript 數(shù)據(jù)結(jié)構(gòu)的題

    面試題是3個(gè)數(shù)據(jù)結(jié)構(gòu)的題,可以用java/c/c++/python實(shí)現(xiàn),靠,js也能實(shí)現(xiàn),鄙視js?我上機(jī)就用js寫的,雖說肯定沒戲,但js我挺。
    2008-07-07
  • 代碼觸發(fā)js事件(click、change)示例應(yīng)用

    代碼觸發(fā)js事件(click、change)示例應(yīng)用

    Chrome , Firfox 不支持fireEvent的方法可以使用dispatchEvent的方法替代,直接給一個(gè)兼容的Code,下面有個(gè)不錯(cuò)的示例,喜歡的朋友可以收藏下
    2013-12-12

最新評論