Javascript 如何以编程方式转义引号?

Javascript 如何以编程方式转义引号?,javascript,escaping,special-characters,Javascript,Escaping,Special Characters,这应该很简单,但我想不出来 我想让用户编辑一个值。为此,单击后,该值将变为文本框。但是,如果用户在文本框内的用户输入中添加引号,则文本框的value=“属性会提前关闭,引号和任何在其丢失后的内容都会丢失。Escape(已弃用)和encodeURI只是用asci-does替换引号,这在文本框中看起来不太好 感谢任何人对此问题的解决方案: 下面是javascript: function editText() { var text = document.getElementById('text').i

这应该很简单,但我想不出来

我想让用户编辑一个值。为此,单击后,该值将变为文本框。但是,如果用户在文本框内的用户输入中添加引号,则文本框的
value=“
属性会提前关闭,引号和任何在其丢失后的内容都会丢失。Escape(已弃用)和encodeURI只是用asci-does替换引号,这在文本框中看起来不太好

感谢任何人对此问题的解决方案:

下面是javascript:

function editText() {
var text = document.getElementById('text').innerHTML;
var edittext = '<input type="text" size=60 name="name" id="name" value="'+text+'"><input type="button" value="Save" onclick="storeText(\'name\');">';
document.getElementById('text').innerHTML = edittext
return false;
}
函数editText(){
var text=document.getElementById('text').innerHTML;
var edittext='';
document.getElementById('text')。innerHTML=edittext
返回false;
}
html:

Text:他说“太酷了”
JSFIDLE

更新:

与那些将此标记为重复的人所说的相反,重复的问题并不能回答我的问题。他们可能想重新阅读我的问题和所谓的重复,并在心里注册我问题中的单词
“prographic”
,然后实际查看与此处代码相关的重复代码。。。。只是说说而已

最后,我将textbox更改为textarea作为一种解决方法,因为似乎没有一种直接的方法可以通过编程方式在textbox中转义引号


下面Merlin给出的答案是一种可能的方法,但是调用第二个函数比仅仅用textarea替换textbox要复杂得多。在任何情况下,我都无法实现这一点,但我感谢Merlin的回答并对其进行了投票。

为什么不直接设置值,而不是重建
输入

document.getElementById('name').value = edittext
当然,这假设您的DOM中已经存在
id=name
input
元素,但是我看不出有什么特别的原因您不能确保它已经存在(直接用HTML编写或在页面加载时用Javascript生成)

更新:OP似乎希望在
onClick
中动态创建元素,方法是将
div
中当前的文本转换为
输入
字段,并将该
div
的内容作为其

假设
id
是唯一的,我相信下面的方法可能会奏效

function editText() {
var text = document.getElementById('text').innerHTML;
var edittext = '<input type="text" size=60 name="name" id="name" value="" /><input type="button" value="Save" onclick="storeText(\'name\');">';
document.getElementById('text').innerHTML = edittext;
document.getElementById('name').value = text;
document.getElementById('text').onclick = function() {}; //
return false;
}

为什么不直接设置值而不是重建
输入

document.getElementById('name').value = edittext
当然,这假设您的DOM中已经存在
id=name
input
元素,但是我看不出有什么特别的原因您不能确保它已经存在(直接用HTML编写或在页面加载时用Javascript生成)

更新:OP似乎希望在
onClick
中动态创建元素,方法是将
div
中当前的文本转换为
输入
字段,并将该
div
的内容作为其

假设
id
是唯一的,我相信下面的方法可能会奏效

function editText() {
var text = document.getElementById('text').innerHTML;
var edittext = '<input type="text" size=60 name="name" id="name" value="" /><input type="button" value="Save" onclick="storeText(\'name\');">';
document.getElementById('text').innerHTML = edittext;
document.getElementById('name').value = text;
document.getElementById('text').onclick = function() {}; //
return false;
}
尝试:
text.replace(/“/g,”)

理想情况下,您应该使用
createElement
创建元素,此时您可以执行
elem.value=text
,而无需转义。

尝试:
text.replace(/“/g,”)


理想情况下,您应该使用
createElement
创建元素,此时您可以执行
elem.value=text
,而无需转义。

首先,用户单击该值以显示输入框进行编辑。当编辑框中显示的值与该值不同时,会发生错误。您将在哪里添加这一行?@user1904273,您需要给出一个更完整的示例来演示该问题。听起来像是在动态地创建
input
元素并替换其他元素。如果是这样,那么您仍然可以先创建元素,然后使用我提供的解决方案。@user1904273,我想我理解了,我更新了答案。如果这是你的本意,请告诉我。我想无论如何都无法摆脱引号。你是对的,这是缩写代码。此函数对整个页面执行多个任务,单击即可编辑字段(在完整版本中,它将字段名称作为输入)。所以我试着让它尽可能简单。。。。添加了JSFIDLE以最简单的形式说明问题。@user1904273,您可以使用字符串替换将`\`添加到每个
但是用用户输入构建HTML通常是个坏主意。首先,用户单击该值以显示输入框进行编辑。当编辑框中显示的值与该值不同时,会发生错误。您将在哪里添加这一行?@user1904273,您需要给出一个更完整的示例来演示该问题。听起来像是在动态地创建
input
元素并替换其他元素。如果是这样,那么您仍然可以先创建元素,然后使用我提供的解决方案。@user1904273,我想我理解了,我更新了答案。如果这是你的本意,请告诉我。我想无论如何都无法摆脱引号。你是对的,这是缩写代码。此函数对整个页面执行多个任务,单击即可编辑字段(在完整版本中,它将字段名称作为输入)。所以我试着让它尽可能简单。。。。添加了JSFIDLE以最简单的形式说明问题。@user1904273,您可以使用字符串替换将“\`添加到每个
,但用用户输入构建HTML通常是个坏主意。我认为这将在输入框中显示“…@user1904273它对我有效。我想这会显示“在输入框中…@user1904273它对我有用。就这样做吧。”