2012-11-25 112 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字符。這不一定會避免任何後續的函數調用給出問題,但這意味着該字符串不必被解碼。