在JavaScript中逃避单引号

时间:2012-11-25 20:16:10

标签: javascript jquery html

我写了一个函数:

function makeTitleEditable($titleContainer){
        var defaultValue = $titleContainer.text().replace("'","\\'");
        $titleContainer.replaceWith("<input id='poll_title' name='poll[title]' value='" + defaultValue +"' type='text'>");
      }

现在问题是我还是无法逃脱单引号。例如,如果

$titleContainer.text() => I'm lucky

console.log("<input id='poll_title' name='poll[title]' value='" + defaultValue +"' type='text'>") => <input id='poll_title' name='poll[title]' value='I\'m lucky!' type='text'> 

会生成值为“I”的DOM,而不是“我很幸运”。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:4)

当然,快速解决方法只是将"'"替换为"\'",尽管在复制和粘贴类型的基础上确实无法扩展。
更好的是通过正则表达式,例如:

var badString = "Visit John's Site!!!";
var goodString = badString.replace(/'/g, "\'");

请记住,它们会再次显示服务器端或甚至后续函数调用中的简单撇号,因此如果您计划在不同函数之间传递它们,则可能更倾向于使用另一种解决方案:

var badString = "Visit John's Site!!!";
var goodString = badString.replace(/'/g, "\x27");

这是撇号的标准Unicode字符。这不一定会避免任何后续函数调用产生问题,但这意味着不必解码字符串。

答案 1 :(得分:2)

使用jQuery设置值;

function makeTitleEditable($titleContainer){
    $titleContainer.replaceWith(
       $("<input id='poll_title' name='poll[title]' type='text'>").val($titleContainer.text())
    );
}