【问题标题】:Change link target attribute if its href attribute contains certain phrase如果其 href 属性包含某个短语,则更改链接目标属性
【发布时间】:2012-02-27 04:06:26
【问题描述】:

我正在尝试使用 .each() 检查所有锚点的标签,并将主页 URL 的目标设置为 _self,将其他非主页 URL 的目标设置为 _blank

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

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

这也在 jsBin here.

由于某种原因,非主页 URL 设置为 target="_self"。谁能解释一下为什么?

【问题讨论】:

    标签: jquery-selectors if-statement target jquery


    【解决方案1】:

    试试这个:

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

    is() 如果所选元素与函数中的选择器匹配,则返回 true,否则返回 false。因此,如果当前链接的hrefattribute containsgoogle.ca,它将其target 属性更改为_self。否则,它会将其设置为_blank

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

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

    【讨论】:

    • 谢谢!很好,我开始喜欢这个网站了!我已经问了三个问题,今天是我开始发帖的第一天,很快就得到了答复。很棒的网站,里面有很棒的人!
    • @FoxKllD:没问题。这就是网站的想法!我喜欢在这里帮助我的程序员同事。 :) 我想指出,如果我的回答帮助您解决了问题,最好将其标记为已接受未来访问者。
    • 我每分钟都在尝试标记它,第五分钟我终于可以标记你的答案!大声笑,我认为我的问题是我不知道问题所在。
    • 我们所做的只是将$(this) 存储在名称为$this 的变量中。这样做是让我们只使用一次$(this)。由于它是一个昂贵的选择器(它非常慢,如果使用过多会显着降低页面的速度),因此最好尽可能少地使用它。
    【解决方案2】:
    var homeURL = 'google.ca';
    $('a').each(function() {        
        $(this).attr('target', (this.href.match( homeURL )) ? '_self' :'_blank');       
    });
    

    【讨论】:

    • 谢谢哥们!你向我展示了另一种做我想做的事情的方法。我真的很感激。
    • 非常好的、优雅的解决方案。
    【解决方案3】:

    您也可以通过以下方式实现:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-23
      • 2010-09-15
      相关资源
      最近更新 更多