如何用javascript操作DOM_改变网页内容的方法有哪些【教程】

修改内容首选textContent防XSS,需HTML结构时用innerHTML并过滤;追加节点用createElement+appendChild更安全;改属性优先dataset和DOM属性,避免setAttribute(“style”);精准替换用replaceChild。

如何用javascript操作dom_改变网页内容的方法有哪些【教程】

直接修改 innerHTMLtextContent 最常用

这两个是最直观的改内容方式,但行为差异很大:innerHTML 会解析 HTML 字符串,textContent 只当纯文本处理。比如设为 "hello",前者显示加粗文字,后者原样输出标签字符。

常见错误是该用 textContent 防 XSS 却误用 innerHTML,尤其拼接用户输入时。反过来,想插入带样式的结构又只用 textContent,结果看不到效果。

  • 动态更新一段说明文字?优先用 textContent
  • 要替换整个区块并保留子元素结构?用 innerHTML
  • 不确定来源是否可信?一律先 textContent,真需 HTML 再做白名单过滤

createElement + appendChild 增量添加节点

适合往已有容器里追加新内容,而不是全量替换。比反复写 innerHTML += ... 更安全、性能更好——后者会销毁重建所有子节点,丢失事件监听器和表单状态。

典型场景:加载更多列表项、实时日志输出、表单提交后追加成功提示。

立即学习Java免费学习笔记(深入)”;

  • 先用 document.createElement("li") 创建节点
  • textContentinnerHTML 设内容(注意 XSS)
  • appendChild()prepend() 插入到目标父元素
  • 批量插入多个节点时,建议用 DocumentFragment 减少重排

setAttributedataset 改属性与自定义数据

改内容不只限于“文字”,还包括控制行为和样式的数据。比如切换按钮状态、标记已读、存 ID 映射等,都靠改属性实现。

动态WEB网站中的PHP和MySQL:直观的QuickPro指南第2版

动态WEB网站中的PHP和MySQL:直观的QuickPro指南第2版

动态WEB网站中的PHP和MySQL详细反映实际程序的需求,仔细地探讨外部数据的验证(例如信用卡卡号的格式)、用户登录以及如何使用模板建立网页的标准外观。动态WEB网站中的PHP和MySQL的内容不仅仅是这些。书中还提到如何串联JavaScript与PHP让用户操作时更快、更方便。还有正确处理用户输入错误的方法,让网站看起来更专业。另外还引入大量来自PEAR外挂函数库的强大功能,对常用的、强大的包

下载

setAttribute("class", "active") 和直接操作 className 效果类似,但 dataset 是专为 data-* 属性设计的接口,更语义化且自动处理驼峰转换。

  • srchrefdisabled 等标准属性,用 setAttribute 或对应 DOM 属性(如 el.src = "..."
  • 存业务数据,如 el.dataset.userId = "123",之后取值就是 el.dataset.userId
  • 避免用 setAttribute("style", "..."),应改 el.style.color = "red",更易维护

replaceChildremove + insertBefore 精确替换节点

当需要把某个特定子元素换成另一个全新结构时,innerHTML 太粗暴,appendChild 又不对位。这时候就得用节点级操作。

比如表格中某一行要整体刷新、模态框内容按步骤切换、或者编辑态下把文本变成输入框——这些都依赖精准替换。

  • 获取旧节点:const oldNode = el.querySelector(".item")
  • 创建新节点:const newNode = document.createElement("div")
  • 替换:oldNode.parentNode.replaceChild(newNode, oldNode)
  • 或用 el.insertBefore(newNode, oldNode) 插在前面,再 oldNode.remove()

注意 replaceChild 要求新旧节点都是同一文档中的有效节点,跨 iframe 或已移除节点会报错 NotFoundError

https://www.php.cn/faq/2018345.html

发表回复

Your email address will not be published. Required fields are marked *