Javascript escape()不';你的工作似乎不连贯吗?

Javascript escape()不';你的工作似乎不连贯吗?,javascript,string,browser,escaping,Javascript,String,Browser,Escaping,我使用javascript生成HTML代码,例如添加一个函数,该函数通过单击链接开始,如: $('#myDiv').append('<a href="javascript:start(\''+TERM+'\');">click</a>'); 或 使用firebug查看HTML源代码,可以看到,生成了以下代码: <a href="javascript:start('moody%27s');">click</a> 这很好,直到我真的点击了链接—

我使用javascript生成HTML代码,例如添加一个函数,该函数通过单击链接开始,如:

$('#myDiv').append('<a href="javascript:start(\''+TERM+'\');">click</a>');

使用firebug查看HTML源代码,可以看到,生成了以下代码:

<a href="javascript:start('moody%27s');">click</a>

这很好,直到我真的点击了链接——所以浏览器(这里是firefox)开始解释
%27
,并尝试启动
start('moody's')

在JS中处理术语之前,有没有一种方法可以在不解释
%27
的情况下转义术语persistent?是否有其他解决方案代替使用正则表达式将
'
更改为
\'

escape()
函数用于转义通过网络传递的url,而不是字符串。我不知道有一个内置函数可以为JavaScript转义字符串,但您可以尝试我在网上找到的这个函数:

用法:
EscapeSingleQuotes(strString)


编辑:刚刚注意到您关于正则表达式的注释。这个解决方案确实使用正则表达式,但我认为这并没有什么问题:-)

不要尝试生成内联JavaScript。那样会带来太多的痛苦和痛苦。(如果您要走这条路,那么您将使用
\
对JavaScript字符串中的字符进行转义)

改用标准事件绑定例程

假设
$
是jQuery,而不是使用该无效变量名的许多其他库中的一个:

$('#myDiv').append(
    $('<a>').append("click").attr('href', 'A sensible fallback').click(function (e) {
        alert(TERM); // Because I don't have the function you were calling
        e.preventDefault();
   })
);
$('#myDiv')。追加(
$('

escape()用于url编码内容,而不是用于使输入字符串文字成为可能。您的代码存在严重缺陷,原因有几个

如果需要onclick事件,请使用onclick事件。不要尝试用标记“注入”javascript代码。如果变量中有“字符串”,则永远不需要替换其中的任何内容,除非生成URL或其他受限术语

var element = $('<span>click</span>');
element.bind('click', function () { start(TERM); });
$('#myDiv').append(element);
var元素=$('click');
bind('click',function(){start(TERM);});
$('#myDiv')。追加(元素);

如果您不知道它的作用,那么回到basic,了解javascript中事件和函数引用的含义。

替换
有什么问题吗?在生成的HTML上使用事件怎么样,比如(我看到您没有用jquery标记问题,但这只是一个建议:)@Dave Newton<代码>没有什么问题。替换<代码>-这是我知道的唯一解决方法,但也许有人知道更好的解决方案,比如“手动”更改术语(同意),但问题是一样的。不,不是,因为你可以说<代码>开始(术语)(省略单引号),它当时绑定到值。@Dave Newton-不,它不是。当试图使用JavaScript生成带有嵌入式JavaScript的HTML时,问题是嵌套字符串引用。通过删除其中的“嵌入式JavaScript”部分,这个问题就消失了。@Quentin啊,是的,duh;你的原稿中的引语通过我删掉了——对不起!在我第一次阅读时,我忽略了它是一个变量,但我修正了它。
<a href="javascript:start('moody%27s');">click</a>
$('#myDiv').append(
    $('<a>').append("click").attr('href', 'A sensible fallback').click(function (e) {
        alert(TERM); // Because I don't have the function you were calling
        e.preventDefault();
   })
);
var element = $('<span>click</span>');
element.bind('click', function () { start(TERM); });
$('#myDiv').append(element);