← 返回目录

4. innerText 与 innerHTML

改盒子里的字,有两把不同的刷子innerText 是"照抄文字"——你写啥它就原封不动显示啥;innerHTML 是"懂排版的"——你给它标签,它真给你排出版式。但正因为它太听话,别人输入的内容千万别丢给它,否则会被塞进捣乱的代码(这叫 XSS 攻击)。

4.1 互动演示(看两把刷子的区别)

我是被改写的目标盒子
点按钮看:同一串字,两种写法结果完全不同。

4.2 知识点逐条讲解

innerText:只认字,不认标签

把它想成一台复印机:你给它带尖括号的东西,它也只会原原本本印成一行字,绝不会把 当真。

let box = document.getElementById('targetBox'); // 抓到目标盒子

// 给它一串带标签的字
box.innerText = '<b>加粗</b> 你好'; // 照抄,尖括号只当普通字
// 屏幕上就是原样显示:<b>加粗</b> 你好(字不会变粗)
	

innerHTML:真的会认标签

把它想成一个排版员:你给它标签,它按标签排版——真的变粗、<h1>真的变大标题。

let box = document.getElementById('targetBox'); // 还是那个目标盒子

// 给同样的一串字
box.innerHTML = '<b>加粗</b> 你好'; // 它真认标签,把 <b> 当真排版
// 屏幕上"加粗"两个字真的变粗了!
	

如果你用 innerHTML 写一次新内容,盒子里原来的字就没了。因为它是"整块替换"不是"在后面追加";想保留旧内容,得自己拼字符串或用 appendChild。

③ 为什么别人输入的内容要用 innerText(防 XSS)

想象有人故意输入这么一串"字":一张故意加载失败的图片,图片一失败就自动跑一段偷偷的代码。如果你用 innerHTML,浏览器真会照办;用 innerText,它只会被当成一行普通文字,啥也跑不起来。

// 别信的"坏内容"长这样:一张 src 写错的图,失败就弹窗
<img src=x onerror="alert('坏代码跑了')">
	

如果你把别人/后端给的内容直接塞进 innerHTML,就可能让坏人偷偷在你页面跑代码(XSS);因为 innerHTML 会把标签当真去执行,而 innerText 只会当成普通字。所以:展示别人给的内容一律用 innerText,只有自己写死、确定安全的标签才用 innerHTML。

实战:用在哪 / 常见坑 / 怎么解决

① 用在哪:评论区/聊天列表展示用户内容;自己写死结构时动态插入标签。

② 常见坑:把用户输入用 innerHTML 渲染导致 XSS;或忘了 innerHTML 是整块覆盖。

③ 怎么解决:展示别人内容一律 innerText;自己造结构才用 innerHTML,注意它会覆盖原内容。

一句话记住:innerText 安全只显字,innerHTML 真排版;自己造标签用 innerHTML,显示别人输入用 innerText,别把别人内容丢进 innerHTML。