5

我写了一个函数:

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。我怎么解决这个问题?

4

2 回答 2

5

当然,快速修复只是简单地替换"'"为,"\'"尽管这在复制和粘贴类型的基础上确实不可扩展。
更好的是通过正则表达式,例如:

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

请记住,尽管它们随后会在服务器端甚至在后续函数调用中再次显示为简单的撇号,所以如果您打算在不同的函数之间传递它们,另一种解决方案可能更可取:

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

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

于 2016-04-05T19:58:05.093 回答
2

使用jQuery设置值;

function makeTitleEditable($titleContainer){
    $titleContainer.replaceWith(
       $("<input id='poll_title' name='poll[title]' type='text'>").val($titleContainer.text())
    );
}
于 2012-11-25T20:19:58.170 回答