如何使用javascript将target =“_ blank”添加到某些链接?

时间:2011-12-19 00:14:13

标签: javascript

是否可以使用javascript将target="_blank"添加到网址中包含以下内容的所有链接:profile.php?id=

3 个答案:

答案 0 :(得分:4)

以下内容应该有效:

var aElems = document.links;

for (var i=0,len = aElems.length; i<len; i++){
    if (aElems[i].href.indexOf('profile.php?id=') != -1){
        aElems[i].target = '_blank';
    }
}

JS Fiddle demo


已修改以改善上述代码的效果,删除document.links并将其替换为document.getElementsByTagName('a')

var aElems = document.getElementsByTagName('a');

for (var i=0,len = aElems.length; i<len; i++){
    if (aElems[i].href.indexOf('profile.php?id=') != -1){
        aElems[i].target = '_blank';
    }
}

JS Fiddle demo


值得注意的是,使用Chris Fulstow querySelectorAll()启用$('a[href*="profile.php?id="]')方法的速度略快(在Chromium 14 / Ubuntu 11.04中):JS Perf speed-test。因此,以下是最快的(在支持querySelectorAll()的浏览器中):

var aElems = document.querySelectorAll('a[href*="profile.php?id="]');

for (var i=0,len = aElems.length; i<len; i++){
    if (aElems[i].href.indexOf('profile.php?id=') != -1){
        aElems[i].target = '_blank';
    }
}

JS Fiddle demo

JS Perf comparison支持“最快”的断言,至少在Chromium 14 / Ubuntu 11.04中。当然,请记住IE < 8, and Firefox 3,这种方法不会很好。

当然,上述内容应更正为:

var aElems = document.querySelectorAll('a[href*="profile.php?id="]');

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

JS Fiddle demo

这是因为if条件已由querySelectorAll()评估,这使if完全冗余。

修改了JS Perf comparison: http://jsperf.com/anchor-selector-test/3

答案 1 :(得分:3)

另一个jQuery解决方案,只是为了好玩。

$("a[href*='profile.php?id=']").attr("target", "_blank");

答案 2 :(得分:1)

使用JQuery或查看他们的source并将他们的逻辑移植到您自己的代码库中:

$(function(){
    $('a').each(function(){
        var $this = $(this);
        if ($this.attr('href').indexOf('profile.php?id=') !== -1) {
            $this.attr('target','_blank');
        }
    });
});

演示:http://jsfiddle.net/KJv7D/