Измените целевой атрибут ссылки, если его атрибут href содержит определенную фразу - PullRequest
5 голосов
/ 27 февраля 2012

Я пытаюсь проверить теги всех якорей с помощью .each() и установить целевой URL для домашних URL-адресов на _self, а целевой URL-адрес других домашних адресов на _blank.

Пока что я получилthis:

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

Это также на jsBin здесь .

По некоторым причинам, не домашние URL установлены на target="_self".Кто-нибудь может объяснить, почему?

Ответы [ 3 ]

9 голосов
/ 27 февраля 2012

Попробуйте вместо этого:

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

is() возвращает true, если выбранный элемент соответствует селектору в функции, и false, если нет. Таким образом, если атрибут href текущей ссылки содержит google.ca, он изменит свой атрибут target на _self. В противном случае будет установлено значение _blank.

И, на самом деле, для большей эффективности вы должны кешировать $(this):

var $this = $(this);
if($this.is("[href*=" + homeURL + "]")){
    $this.attr('target','_self');
} else {
    $this.attr('target','_blank');
}
7 голосов
/ 27 февраля 2012
var homeURL = 'google.ca';
$('a').each(function() {        
    $(this).attr('target', (this.href.match( homeURL )) ? '_self' :'_blank');       
});
2 голосов
/ 06 октября 2014

Вы также можете достичь этого с помощью:

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