2011-02-24 225 views
1

我想制作一个JavaScript,将每个链接放入属性target="_blank",以便链接将在新标签中打开。这是我做的:JavaScript:在新标签中打开链接

function open_links_in_new_tabs() { 
    var links = document.documentElement.getElementsByTagName("a"); 
    for(var link in links) { 
     link.setAttribute("target", "_blank"); 
    } 
} 

window.onload = function() { open_links_in_new_tabs(); } 

但是,这是行不通的。你知道错误在哪里吗?

感谢,

伊万

+2

为了记录,*原因*您的原始代码不起作用是因为'link'是索引,而不是实际的链接。看到这个例子更好地理解:http://jsfiddle.net/cNcFq/ – 2011-02-24 11:56:12

回答

5

foo in bar语法doesn't workNodeList对象(又名 “由document.getElementsByTagName返回的东西”)。

使用一个普通的老for (var i = 0; i < links.length; i++)(与links[i]而不是link,当然)循环,它应该工作。

0

您在这里使用的for... in循环稍微有点错误。试试这个:

for(var link in links) { 
    links[link].setAttribute("target", "_blank"); 
} 

编辑:虽然我的例子在这种情况下工作,Boldewyn是正确的,如果你的脚本是不是在元件上运行,这将产生意外结果。

+0

这不建议用于普通数组,普通for循环是最好的方法。 – 2011-02-24 11:53:50

+0

是的,我同意 - 请参阅编辑。 – 2011-02-24 11:55:59

0

我测试这个计算器上,它似乎对所有的链接:)

var links = document.getElementsByTagName("a"); 

for(var i = 0; i < links.length; ++i) { 
    links[i].setAttribute('target', '_blank'); 
} 
0

你为什么不使用jQuery,如果你想在这里使用jquery工作,然后是代码:

$(document).ready(function(){ 
    $('a').attr("target","_blank"); 
}) 
相关问题