如何处理HTML组件中的复杂DOM结构更新

冬晨酱_5561

冬晨酱_5561

2026-07-02

813人浏览

原创

innerhtml 更新时会嵌套多层 是因为只替换内容而不替换标签本身,导致新 被作为子节点插入;正确做法是仅拼接内部 html 并单独更新属性。

如何处理html组件中的复杂dom结构更新

innerHTML 更新时为何会嵌套出多层 <li>

因为 innerHTML 只替换目标元素的“内容”,不碰它的标签本身。如果你给一个已存在的 <li> 元素赋值含完整 <li> 标签的字符串,浏览器会把新 <li> 当作子节点塞进去——结果就是 <li> <li>...</li>。

常见错误写法:

_renderWorkoutUpdated(currentWorkout) {
  let html = `
  • ...
  • `; document.querySelector(`.workout[data-id="${currentWorkout.id}"]`).innerHTML = html; }

    正确做法是:只拼内部 HTML(不含外层 <li>),再单独设属性:

    • 构建字符串时去掉 <li> 和
    • ,只保留子结构(如 <div class="workout__details">...) <li>用 <code>targetLi.innerHTML = html 替换内容
    • 用 targetLi.className = ... 和 targetLi.dataset.id = ... 单独更新属性
    • 务必先检查 targetLi 是否存在,避免 Cannot set property 'innerHTML' of null
    • textContent vs innerHTML:什么时候该用哪个

      纯文本更新用 textContent,带结构的动态内容用 innerHTML——但后者有 XSS 风险,不能直接插入用户输入。

      html-to-pptx
      html-to-pptx

      将多页 HTML 演示文稿转换为美化的 PPTX 文件,便于分享和分发。

      下载
      • textContent 自动转义 、<code>& 等字符,适合显示用户名、日志摘要等不可信内容
      • innerHTML 解析 HTML,适合渲染富文本、按钮组、图标等结构化片段
      • 若需混合使用(比如部分可信、部分不可信),先对不可信字段调用 escapeHtml() 再拼接,不要依赖后端过滤
      • 注意:修改 textContent 不会触发重排,比 innerHTML 轻量;但改完后无法响应点击事件(没标签)

      批量更新列表项时如何避免频繁重排

      一次改 10 个 <li>,逐个调用 innerHTML 会触发 10 次回流;换成 DocumentFragment 或字符串拼接,只要 1 次。

      • 优先用字符串拼接 + 单次 innerHTML 赋值(适合静态模板)
      • 若需绑定事件或复用节点,用 document.createDocumentFragment() 批量 append,最后一次性 appendChild
      • 避免在循环里读取 offsetHeight、getBoundingClientRect(),它们会强制同步回流
      • 表格类场景(如 <tbody> 更新)尤其敏感,建议用 <code>innerHTML 替代逐行 insertRow

        replaceChild 与 innerHTML 在组件更新中的实际取舍

        replaceChild 更精确,但写法啰嗦;innerHTML 简单粗暴,但会销毁子节点事件监听器。

        • 用 replaceChild:当目标节点下有手动绑定的事件、第三方插件实例(如 Chart.js 图表)、或需要保留某些状态(如 input 的 focus/selection)
        • 用 innerHTML:内容完全可重建、无状态依赖、追求开发效率(比如日志列表、通知卡片)
        • 折中方案:封装一个 safeReplace 函数,先提取关键状态(如 input.value、scrollTop),再 innerHTML,最后恢复
        • 注意:React/Vue 等框架内部也基于类似逻辑做 diff,手写时别重复造轮子——简单场景够用,复杂交互建议上框架

        最易被忽略的是:DOM 更新后,原节点引用仍指向旧结构,后续操作可能报错或静默失败。每次用 querySelector 获取目标前,最好确认它还在文档中。

    前端入门到VUE实战笔记:立即使用
    在学习笔记中,你将探索 前端 的入门与实战技巧!

    相关文章

    HTML速学教程(入门课程)
    HTML速学教程(入门课程)

    HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

    下载

    相关标签:

    html

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    相关专题

    更多
    html版权符号
    html版权符号

    html版权符号是“©”,可以在html源文件中直接输入或者从word中复制粘贴过来,php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

    2023.06.14

    5515

    7

    html在线编辑器
    html在线编辑器

    html在线编辑器是用于在线编辑的工具,编辑的内容是基于HTML的文档。它经常被应用于留言板留言、论坛发贴、Blog编写日志或等需要用户输入普通HTML的地方,是Web应用的常用模块之一。php中文网为大家带来了html在线编辑器的相关教程、以及相关文章等内容,供大家免费下载使用。

    2023.06.21

    3152

    4

    html网页制作
    html网页制作

    html网页制作是指使用超文本标记语言来设计和创建网页的过程,html是一种标记语言,它使用标记来描述文档结构和语义,并定义了网页中的各种元素和内容的呈现方式。本专题为大家提供html网页制作的相关的文章、下载、课程内容,供大家免费下载体验。

    2023.07.31

    2830

    5

    html空格
    html空格

    html空格是一种用于在网页中添加间隔和对齐文本的特殊字符,被用于在网页中插入额外的空间,以改变元素之间的排列和对齐方式。本专题为大家提供html空格的相关的文章、下载、课程内容,供大家免费下载体验。

    2023.08.01

    2839

    5

    html是什么
    html是什么

    HTML是一种标准标记语言,用于创建和呈现网页的结构和内容,是互联网发展的基石,为网页开发提供了丰富的功能和灵活性。本专题为大家提供html相关的各种文章、以及下载和课程。

    2023.08.11

    4719

    6

    html字体大小怎么设置
    html字体大小怎么设置

    在网页设计中,字体大小的选择是至关重要的。合理的字体大小不仅可以提升网页的可读性,还能够影响用户对网页整体布局的感知。php中文网将介绍一些常用的方法和技巧,帮助您在HTML中设置合适的字体大小。

    2023.08.11

    2801

    3

    html转txt
    html转txt

    html转txt的方法有使用文本编辑器、使用在线转换工具和使用Python编程。本专题为大家提供html转txt相关的文章、下载、课程内容,供大家免费下载体验。

    2023.08.31

    2589

    3

    html文本框代码怎么写
    html文本框代码怎么写

    html文本框代码:1、单行文本框【<input type="text" style="height:..;width:..;" />】;2、多行文本框【textarea style=";height:;"></textare】。

    2023.09.01

    2328

    6

    HTML嵌入CSS样式的方法
    HTML嵌入CSS样式的方法

    HTML嵌入CSS样式的方法有内联样式、内部样式表和外部样式表。本专题为大家提供CSS样式相关的文章、下载、课程内容,供大家免费下载体验。

    2023.09.20

    2348

    5

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    jQuery官方API文档
    jQuery官方API文档

    共0课时 | 0人学习

    JavaScript 编程技巧与实战
    JavaScript 编程技巧与实战

    共103课时 | 15.4万人学习