JavaScript中DOM节点插入HTML字符串的方法与用法
时间:2026-08-15 | 作者:白桃企划师 | 阅读:0更稳妥的做法,是优先用 insertAdjacentHTML() 来精确插入 HTML 字符串。
它支持 beforebegin、afterend、afterbegin、beforeend 四种插入位置,而且不会把原有事件监听器一并破坏掉。
相比之下,innerHTML 更适合整块替换内容。如果拿它做追加,往往会触发重新解析,结果就是监听器丢失。
至于 createElement + innerHTML 这种写法,通常显得多此一举,能避开就尽量避开。
还有一点尤其关键:只要涉及用户输入,就必须先做好转义,或者直接使用 DOMPurify 来防范 XSS。
直接用 innerHTML 或 insertAdjacentHTML(),是最常用、最安全的方式,不需要手动解析字符串,也不需要创建一堆元素节点。
常用方式怎么选
用 insertAdjacentHTML() 精准插入
这个方法可以把 HTML 字符串插到目标元素的四个位置:
- 元素前面:
'beforebegin' - 元素后面:
'afterend' - 元素内部最前面:
'afterbegin' - 元素内部最后面:
'beforeend'
字符串会被自动解析后再插入到 DOM 中。
通常不会把原有的事件监听器弄丢,前提是不要直接覆盖那些已经绑定了监听器的节点。
el.insertAdjacentHTML('beforeend', '—— 插到元素内部末尾,等效于新内容')el.innerHTML += ...,但更推荐,因为不重新解析整个innerHTMLel.insertAdjacentHTML('beforebegin', '—— 插到元素自己前面,成为其兄弟节点前置段落
')- 注意:第二个参数必须是合法 HTML 字符串,不能是纯文本;浏览器会自动转义标签内属性值,但需确保结构闭合,否则可能被修正或截断
用 innerHTML 替换或追加内容
innerHTML 适合整体替换子内容,也适合简单场景下的内容追加。
写法虽然简洁,但要注意它的副作用。
el.innerHTML += '追加'实际上会重新解析整个innerHTML,导致子元素上的事件监听器丢失el.innerHTML = '全新内容'会清空原有子节点,全部重建- 如果只是追加,优先选
insertAdjacentHTML('beforeend', ...),语义清晰、性能更好、更安全
避免用 document.createElement + innerHTML 拼接
有些人会先创建一个空 div,设置 innerHTML,再追加到页面里。
这种做法通常没有必要,而且显得绕。
const temp = document.createElement('div'); temp.innerHTML = str; el.appendChild(temp.firstElementChild);- 这么做不仅代码冗长,还容易出错(比如字符串含多个顶层节点时,
firstElementChild只取第一个) - 除非你需要对生成的节点做进一步操作(如遍历、过滤、修改属性),否则没必要绕路
需要动态渲染又担心 XSS?得预处理
insertAdjacentHTML 和 innerHTML 不做任何过滤,会直接执行 HTML 解析。
如果字符串来自用户输入,必须提前转义。
- 只对要作为文本显示的部分做 HTML 转义(例如用
textContent或document.createTextNode()) - 若必须插入富文本,应使用专用库(如 DOMPurify)清理后再插入
- 切勿把未校验的用户数据直接拼进 HTML 字符串里,哪怕只是
也可能触发脚本执行
免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。
相关文章
更多-
- JavaScript正则表达式批量处理HTML标签转义与替换方法
- 时间:2026-08-21
-
- JavaScript函数默认参数的精准JSDoc类型注解方法
- 时间:2026-08-21
-
- JavaScript设置Cookie的SameSite属性防范CSRF攻击
- 时间:2026-08-21
-
- JavaScript中BOM如何打开新的浏览器窗口标签
- 时间:2026-08-20
-
- JavaScript微任务队列在事件循环中的执行机制
- 时间:2026-08-20
-
- JavaScript中网络超时如何用流程控制实现中断
- 时间:2026-08-20
-
- JavaScript防抖函数原理与减少高频事件触发方法
- 时间:2026-08-20
-
- TypeScript六个颠覆认知的核心知识点解析
- 时间:2026-08-20
精选合集
更多大家都在玩
大家都在看
更多-
- 糖尿病完全不能吃糖吗
- 时间:2026-09-15
-
- 蚂蚁庄园小课堂2026年9月16日最新题目答案
- 时间:2026-09-15
-
- 小鸡答题今天的答案是什么2026年9月16日
- 时间:2026-09-15
-
- 蚂蚁庄园每日答题答案2026年9月16日
- 时间:2026-09-15
-
- 以下哪种粮食是酿造绍兴黄酒的主要原料 蚂蚁庄园今日答案9月16日
- 时间:2026-09-15
-
- 劝学名句“及时当勉励,岁月不待人”出自哪位诗人 蚂蚁庄园今日答案9.16
- 时间:2026-09-15
-
- 蚂蚁庄园今天答题答案2026年9月16日
- 时间:2026-09-15
-
- 蚂蚁庄园答题今日答案2026年9月16日
- 时间:2026-09-15
