2011-02-24 182 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"); 
}) 
相關問題