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

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)用戶交互,都離不開對(duì)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)(需對(duì)用戶輸入進(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)勢(shì)

  • 自動(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)代瀏覽器支持)

對(duì)比表

屬性獲取內(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. 高級(jí)內(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)勢(shì)

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

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>注冊(cè)時(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平臺(tái)的不斷發(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)容的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • JavaScript創(chuàng)建對(duì)象的七種方式(推薦)

    JavaScript創(chuàng)建對(duì)象的七種方式(推薦)

    JavaScript創(chuàng)建對(duì)象的方式有很多,通過Object構(gòu)造函數(shù)或?qū)ο笞置媪康姆绞揭部梢詣?chuàng)建單個(gè)對(duì)象,顯然這兩種方式會(huì)產(chǎn)生大量的重復(fù)代碼,并不適合量產(chǎn)。接下來介紹七種非常經(jīng)典的創(chuàng)建對(duì)象的方式,他們也各有優(yōu)缺點(diǎn)
    2017-06-06
  • 關(guān)于layui導(dǎo)航欄不展示下拉列表的解決方法

    關(guān)于layui導(dǎo)航欄不展示下拉列表的解決方法

    今天小編就為大家分享一篇關(guān)于layui導(dǎo)航欄不展示下拉列表的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • JavaScript中的精度丟失與分?jǐn)偛黄絾栴}原因及解決方案

    JavaScript中的精度丟失與分?jǐn)偛黄絾栴}原因及解決方案

    這篇文章主要介紹了JavaScript中浮點(diǎn)數(shù)精度問題,包括根本原因、常見場(chǎng)景及解決方案,推薦使用整數(shù)運(yùn)算、BigInt或高精度庫(如decimal.js)來解決金額計(jì)算的精度問題,需要的朋友可以參考下
    2026-03-03
  • JavaScript if...Else 語句全面解析

    JavaScript if...Else 語句全面解析

    本文全面解析JavaScript的if...else語句,涵蓋基礎(chǔ)語法、條件表達(dá)式轉(zhuǎn)換規(guī)則、代碼塊最佳實(shí)踐、嵌套與邏輯運(yùn)算符用法、應(yīng)用場(chǎng)景及性能優(yōu)化技巧,強(qiáng)調(diào)其在邏輯控制中的核心地位,并推薦學(xué)習(xí)資源以提升代碼質(zhì)量與可維護(hù)性,感興趣的朋友跟隨小編一起看看吧
    2025-09-09
  • 如何將php數(shù)組或者對(duì)象傳遞給javascript

    如何將php數(shù)組或者對(duì)象傳遞給javascript

    這篇文章主要介紹了將php數(shù)組或者對(duì)象傳遞給javascript的方法,需要的朋友可以參考下
    2014-03-03
  • 微信小程序api列表匯總包括網(wǎng)絡(luò)API,媒體API,文件API ,微信小程序支付流程,位置API,界面API等

    微信小程序api列表匯總包括網(wǎng)絡(luò)API,媒體API,文件API ,微信小程序支付流程,位置API,界面API等

    這篇文章主要介紹了微信小程序api列表匯總包括網(wǎng)絡(luò)API,媒體API,文件API ,數(shù)據(jù)API,位置API,界面API,微信小程序支付流程,微信小程序登錄流程等,需要的朋友可以參考下
    2022-12-12
  • JS判斷是否長按某一鍵的方法

    JS判斷是否長按某一鍵的方法

    這篇文章主要介紹了JS判斷是否長按某一鍵的方法,涉及JavaScript針對(duì)鍵盤按鍵的判斷及響應(yīng)操作技巧,需要的朋友可以參考下
    2016-03-03
  • 如何通過非數(shù)字與字符的方式實(shí)現(xiàn)PHP WebShell詳解

    如何通過非數(shù)字與字符的方式實(shí)現(xiàn)PHP WebShell詳解

    這篇文章主要給大家介紹了關(guān)于如何通過非數(shù)字與字符的方式實(shí)現(xiàn)PHP WebShell的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。
    2017-07-07
  • 基于JavaScript編寫一個(gè)時(shí)間戳轉(zhuǎn)換工具

    基于JavaScript編寫一個(gè)時(shí)間戳轉(zhuǎn)換工具

    在現(xiàn)代 Web 開發(fā)中,時(shí)間戳是系統(tǒng)間傳遞時(shí)間信息的標(biāo)準(zhǔn)格式,我們常常需要將人類可讀的時(shí)間轉(zhuǎn)換為 Unix 時(shí)間戳或 JavaScript 時(shí)間戳,下面我們就來看看如何編寫一個(gè)時(shí)間戳轉(zhuǎn)換工具吧
    2026-01-01
  • JavaScript利用el-table實(shí)現(xiàn)繪制熱度表

    JavaScript利用el-table實(shí)現(xiàn)繪制熱度表

    這篇文章主要為大家詳細(xì)介紹了JavaScript如何利用el-table實(shí)現(xiàn)繪制熱度表,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-03-03

最新評(píng)論

丽江市| 桐梓县| 都匀市| 长阳| 祥云县| 平凉市| 繁峙县| 右玉县| 滨州市| 济宁市| 长宁县| 红河县| 新密市| 秦安县| 南郑县| 湛江市| 集安市| 安阳县| 三亚市| 环江| 上林县| 武穴市| 大余县| 东乌珠穆沁旗| 乌什县| 聂拉木县| 嘉善县| 新竹县| 政和县| 汕头市| 丽江市| 木里| 车险| 大余县| 邹城市| 咸丰县| 吉木萨尔县| 澄江县| 呈贡县| 保亭| 灵川县|