在javascript(jquery)函数中转义特殊字符

时间:2012-07-07 18:55:39

标签: javascript jquery html

我有这一行在jquery中添加:

$('#league2').append("<input type=\"button\" id=\"2btn\" value=\"1.2\" class=\"butta\"  onmousedown=\"active('exam\'ple','awayteam')");

注意“考试”......我逃过了'带' 所以当点击按钮时,激活的功能应该有效。

这是激活的功能:

function active(hometeam,awayteam){
alert("if this is alerted, it works!");
}

当我点击按钮时,它应警告“如果这是警报,它可以工作!”,但它没有警告它。并且它认为,因为当我使用该功能时,这就是outpot:

function active(exam\'ple,awayteam){

当我用不包含“'”的单词附加相同的内容时,它正在工作。

2 个答案:

答案 0 :(得分:2)

您需要在活动函数的参数中转义反斜杠,而不是撇号。

$('#league2').append("<input type=\"button\" id=\"2btn\" value=\"1.2\" class=\"butta\"  onmousedown=\"active('exam\\'ple','awayteam')");

要转义字符串以使用php将其附加到该代码,您可以使用正则表达式。以下内容适用于您的情况。

// Replaces a backslash with four backslashes: The 'append' function will interpret it as two backslashes; the 'active' function, as only one.
$str = preg_replace("/\\\\/", "\\\\\\\\\\\\\\\\", $str);
// Replaces an apostrophe with two backslashes and an apostrophe, then javascript will append only one backslash and an apostrophe, escaping that way an apostrophe.
$str = preg_replace("/'/", "\\\\\\\\'", $str);
// Replaces quotations with a backslash and quotations: the quotations will be escaped inside the append function, so one quotations will be printed out on your HTML
$str = preg_replace("/\"/", "\\\\\"", $str);

如果你不知道正则表达式(正则表达式)是什么,我建议你研究一下如何使用它们。他们会帮助你很多。

编辑:由于某种原因,最后一个程序需要双倍的反斜杠才能工作。更新。

答案 1 :(得分:1)

当字符串是双引号时,您不需要转义单引号。最好将整个字符串用单引号括起来,这样就可以使用双引号而无需转义。 (或用单引号括起来的双打)。

例如:

$("#thing").append('<div id="foo" class="bar" style="color:black;" onclick="foobar()"></div>');

你的代码有点复杂,因为有多个级别(你考虑过jQuery's click?):

$('#league2').append('<input type="button" id="2btn" value="1.2" class="butta"  onmousedown="active('exam\'ple','awayteam')');