如何阻止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
相关产品推荐
相关产品推荐

