2010-11-01 66 views
1

我的JavaScript输出链接(搜索结果),但我在锚标记锚标记使用Javascript,Javascript中

var str = "<a href='#bokvisning' onclick='javascript:$(#bokvisning_content).load('http://www.akademika.no/node/"+item.link+"')'>" + item.title + "</a>"; 

它输出该添加的onclick有问题,至极是错误的:

<a href="#bokvisning" onclick="javascript:$(#bokvisning_content).load(" http:="" www.akademika.no="" node="" link')'="">Title</a>` 

这可能吗?我还有什么其他选择?

回答

3

速战速决是引号,像这样:

var str = "<a href='#bokvisning' onclick='javascript:$(\'#bokvisning_content\').load(\'http://www.akademika.no/node/"+item.link+"\')'>" + item.title + "</a>"; 

这将是最好添加单击处理程序悄悄不过,像这样:

var anchor = $("<a/>", {href:'#bokvisning', text:item.title}).click(function() { 
    $("#bokvisning_content").load("http://www.akademika.no/node/"+item.link); 
}); 
//or for older jQuery versions (<1.4): 
var anchor = $("<a href='#bokvisning'></a>").text(item.title).click(function() { 
    $("#bokvisning_content").load("http://www.akademika.no/node/"+item.link); 
}); 

然后追加到任何元素您目前正在将字符串放入。

注意:第二个选项上面假设jQuery是一个选项,因为你的onclick正在使用它。

+1

+1总是使用类似DOM的方法,而不是不可靠和不安全的HTML字符串索引,尤其是对于事件处理程序,其中您有多个嵌套转义上下文。然而,这里仍然有一个HTML注入漏洞(如果'item.title'是用户提供的,则可能是XSS)。我建议使用'$('',{text:item.title})...'快捷键来避免这种情况。 – bobince 2010-11-01 13:11:01

+1

@bobince - 良好的调用,虽然稍有不同,但在html字符串*和*属性对象[抛出错误](http://www.jsfiddle.net/nick_craver/297Cm/)中具有属性,尽管它确实应该处理。 – 2010-11-01 13:27:54

+0

哦!你是对的,它是'html,document'重载而不是'html,props'。我从来没有注意到这一点,因为我一直设置'props'中的每个属性,就像你的例子。噢亲爱的!我希望jQuery没有试图将所有的东西都放到一个'$()'属性中,这种价值级的超载是疯狂的! – bobince 2010-11-01 13:58:47

0

你必须正确转义引号:

var str = "<a href='#bokvisning' onclick='javascript:$(#bokvisning_content).load(&#39;http://www.akademika.no/node/"+item.link+"&#39;)'>" + item.title + "</a>"; 

我已经更换了两个撇号与&#39;您的字符串内。

另外,不要你的意思$('#bokvisning_content').load ...,这将使我们:

var str = "<a href='#bokvisning' onclick='javascript:$(&#39;#bokvisning_content&#39;).load(&#39;http://www.akademika.no/node/"+item.link+"&#39;)'>" + item.title + "</a>"; 

总而言之,使用@Nick Craver的解决方案,以解开报价可能是最好的多层。