You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止JavaScript自动转义&字符?文本框需显示&而非&

解决文本框显示&而非&的问题

这个问题我之前也碰到过,确实是浏览器对innerHTML的解析逻辑在搞鬼!当你通过innerHTML获取内容时,它返回的是HTML源码形式的字符串——也就是说,原本的&会被保留成实体&。如果直接把这个字符串塞进文本框的value里,文本框会把它当作纯文本直接渲染,自然就显示出&了。

既然你提到必须通过div处理内容、没法直接给文本框赋值,这里给你几个靠谱的解决方案:

方法1:用textContent替代innerHTML获取纯文本

textContent会直接返回元素内的纯文本内容,不会保留HTML实体编码,是最直接的解决方式:

// 获取你的内容div
const contentDiv = document.getElementById('content-div');
// 直接拿到解码后的纯文本(比如原本的&)
const plainText = contentDiv.textContent;
// 赋值给文本框
document.getElementById('target-input').value = plainText;

方法2:临时元素中转解码

如果你的div内容是通过innerHTML设置的,也可以创建一个临时div来完成实体解码,再提取纯文本:

const contentDiv = document.getElementById('content-div');
const tempDiv = document.createElement('div');
// 把div的HTML内容塞给临时div,浏览器会自动解码实体
tempDiv.innerHTML = contentDiv.innerHTML;
// 提取解码后的纯文本
const plainText = tempDiv.textContent;
// 赋值给文本框
document.getElementById('target-input').value = plainText;

方法3:手动替换实体(不推荐,仅作备选)

如果以上两种方法都不适用,可以手动替换&为&,但这种方式只针对单一实体,遇到其他实体(比如<)就失效了,所以优先级最低:

const contentDiv = document.getElementById('content-div');
const decodedText = contentDiv.innerHTML.replace(/&/g, '&');
document.getElementById('target-input').value = decodedText;

核心逻辑就是:要让文本框显示&,必须先把HTML实体形式的&解码成纯文本的&,再赋值给文本框的value属性——textContent和临时元素的方式都是利用浏览器自身的解析能力来完成解码,比手动替换更可靠。

内容的提问来源于stack exchange,提问作者Clinton Lam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:56:46