如何将锚标记格式化为字符串?

时间:2015-08-04 13:10:33

标签: javascript

这一行:

return '<a href="javascript:SomeFunction('+ var1 + ',' + var2 + ')"; > Stars </a>';

呈现:

<a href="javascript:SomeFunction(Pure Magic,4)" ;=""> Stars </a>

看起来像一个正确的锚标签,但在点击它时会出现此错误:

  参数列表

之后的

Uncaught SyntaxError:missing)

我确信这个错误会产生误导,因为有问题的括号就在那里。

我错过了什么?

提前致谢。

4 个答案:

答案 0 :(得分:2)

由于var1包含字符串值,因此您需要引用它:

return '<a href="javascript:SomeFunction(\'' + var1 + '\',' + var2 + ');"> Stars </a>';

如果字符串可以包含需要转义为字符串文字的字符,或者需要进行URI编码,则需要更多代码:

return '<a href="javascript:' + encodeURIComponent('SomeFunction(\'' + var1.replace("\\", "\\\\").replace("'", "\\'") + '\',' + var2 + ');') + '"> Stars </a>';

生成这样的代码很复杂,很容易弄错。如果可能,您应该生成元素,以便您可以直接设置属性而不是为其创建代码。使用jQuery的示例:

return $('<a>', { href: '#', text: ' Stars ' }).click(function(e){
  e.preventDefault();
  SomeFunction(var1, var2);
});

答案 1 :(得分:1)

你最后在双引号中有错误

return '<a href="javascript:SomeFunction('+ var1 + ',' + var2 + ');" > Stars </a>';

答案 2 :(得分:0)

您没有将第一个var(似乎是一个字符串)包装在引号内。

return '<a href="javascript:SomeFunction(\''+ var1 + '\', ' + var2 + ');" > Stars </a>';

注意:正如Paul S.的评论所指出的那样,分号应该在双引号内,因为它是属性值的一部分。

答案 3 :(得分:0)

由于您只想添加带有 href <a>,请让浏览器使用String.prototype.link

' Stars '.link('javascript:SomeFunction(' + JSON.stringify(var1) + ', ' + JSON.stringify(var2) + ')');
// <a href="javascript:SomeFunction(&quot;Pure Magic&quot;, 4)"> Stars </a>

如果您经常遇到这样的问题,请考虑切换到使用 DOM方法是否更容易,即

var a = document.createElement('a');
a.addEventListener('click', SomeFunction.bind(a, var1, var2));

这样您就不必编写实体编码等来保护自己在每个级别上解释代码( JavaScript HTML JavaScript )并且意味着您可以通过 HTML 更多地直接访问 DOM树