Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用javascript在文本输入中获取html特殊字符_Javascript_Html_Escaping_Special Characters_Htmlspecialchars - Fatal编程技术网

如何使用javascript在文本输入中获取html特殊字符

如何使用javascript在文本输入中获取html特殊字符,javascript,html,escaping,special-characters,htmlspecialchars,Javascript,Html,Escaping,Special Characters,Htmlspecialchars,我想将一些html特殊字符发送到文本字段,然后使用javascript将其恢复为原始格式:例如,如果我发送了“&pi”,它将在文本输入上显示“π”,当我使用javascript将其恢复时,我应该得到“&pi”,但我只能得到“π”,而不能得到“&pi”。请帮忙,我的代码如下: <script type="text/javascript"> function qpush(a) { document.getElementById('input').value += a; } f

我想将一些html特殊字符发送到文本字段,然后使用javascript将其恢复为原始格式:例如,如果我发送了“&pi”,它将在文本输入上显示“π”,当我使用javascript将其恢复时,我应该得到“&pi”,但我只能得到“π”,而不能得到“&pi”。请帮忙,我的代码如下:

<script type="text/javascript"> 
function qpush(a) {
    document.getElementById('input').value += a;
}

function show(a) {
    alert(document.getElementById('input').value);
}
</script>

<input type="text" id="input" />
<input type="button" onclick="qpush('&pi;');" value="&pi;" />
<input type="button" onclick="show()" value="go" />

函数qpush(a){
document.getElementById('input')。值+=a;
}
功能表演(a){
警报(document.getElementById('input').value);
}

属性将为您提供文本,而不是HTML

您可以尝试
getAttribute('value')
,但因为
&pi
π
在HTML中是相同的,浏览器完全可以自由返回
π

一旦HTML被转换成DOM,就无法访问原始HTML(除非使用XHR再次下载HTML并自己解析原始文本)

如果希望数据是
“&pi;”
,那么它的HTML必须是
&;pi

如果希望按钮上的渲染为
π
,则需要:

<button type="button" value="&amp;pi;">π</button>
π
(请记住旧IE在按钮元素上存在的各种缺陷)


当然,这将显示
&pi将值复制到文本输入时。

使用此代码替换所有出现的字符:

document.getElementById('input').value.replace(/π/g,"&pi;");

根据您对it的需求,您可以选择以下三种方式之一:

  • 使用javascript转义和unescape函数:

    var escape=escape('π')//escape=“%u03C0”哪个unescape将变回π

  • 如果jQuery可用,它的html方法可能会起到以下作用:

    $('input').val().html()

  • 这是一种破解方法,但会起作用:以您希望在输入元素的“data-”属性上返回的方式保存值的副本,这将在html5中验证,并且不会在其他doctype中中断

    document.getElementById('input').setAttribute('data-originalValue','&pi')


  • 很好的解决方法,但我需要为所有特殊字符设置它,而不仅仅是π。@KelvinLi您可以维护一个特殊实体映射数组来运行replace。我尝试过,但看起来replace()无法用于π等非常特殊的字符。谢谢您的帮助,但是document.getElementById('input')。getAttribute('value')返回null。噢,忽略了这是从中获取值的不同元素
    getAttribute
    返回属性值(输入的默认值)而不是当前值。感谢您的帮助,我使用转义形式表示数据,使用未转义形式表示显示,它工作正常。很好,我很高兴能提供帮助:)