2012-11-25 113 views
3

我写了一个功能:逃逸单引号在JavaScript

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

+0

为什么你不用你的属性使用双引号? – TimWolla

回答

2

使用jQuery来设置值;

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

当然速战速决是简单地取代““”与“\””虽然这真的不是在复制和粘贴式基础可扩展性。
更好的方式是通过一个正则表达式,如:

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

请记住,虽然他们会再出现服务器端,甚至在随后的函数调用再简单单引号,因此,如果您打算通过它们不同的功能之间各处,另一种解决方案可能是优选的:

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

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