如果其href属性包含某个短语,请更改链接目标属性

时间:2012-02-27 04:06:27

标签: jquery-selectors if-statement target jquery

我正在尝试使用.each()检查所有主播标记,并将首页网址的目标设置为_self,将其他非主页网址设置为_blank

到目前为止,我得到了这个:

$('a').each(function() {
    var homeURL = 'google.ca';    
    if ( $(this+'[href*='+homeURL+']')) {
        $(this).attr('target','_self');
    }else{
        $(this).attr('target','_blank');
    }  
});

这也是在jsBin here

出于某种原因,非主页网址设置为target="_self"。任何人都可以解释原因吗?

3 个答案:

答案 0 :(得分:9)

请改为尝试:

if($(this).is("[href*=" + homeURL + "]")){
    $(this).attr('target','_self');
} else {
    $(this).attr('target','_blank');
}
如果所选元素与函数中的选择器匹配,则

is()返回true,如果不匹配,则返回false。因此,如果当前链接为href attribute contains google.ca,则会将其target属性更改为_self。否则,它会将其设置为_blank

事实上,为了提高效率,您应该缓存$(this)

var $this = $(this);
if($this.is("[href*=" + homeURL + "]")){
    $this.attr('target','_self');
} else {
    $this.attr('target','_blank');
}

答案 1 :(得分:7)

var homeURL = 'google.ca';
$('a').each(function() {        
    $(this).attr('target', (this.href.match( homeURL )) ? '_self' :'_blank');       
});

答案 2 :(得分:2)

你也可以通过以下方式实现这一目标:

$(document).ready(function() {
  $("a[href^='http']").attr('target','_blank');
});