2012-02-27 1 views
4

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

До сих пор я получил это:

$('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". Может ли кто-нибудь объяснить, почему?

+0

Вы можете разместить HTML? – elclanrs

ответ

6

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

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'); 
} 
+0

Thnx! Приятно, я начинаю любить этот сайт! Я уже задал три вопроса, сегодня в первый день я начал публиковать вопросы, и за короткое время они получили ответ. Удивительный сайт с потрясающими людьми! – FoxKllD

+0

@FoxKllD: проблем нет. Это идея с сайтом! Мне нравится быть здесь, чтобы помочь моим коллегам-программистам. :) Я хотел бы отметить, что если мой ответ помог вам решить вашу проблему, то это хорошая практика, чтобы отметить ее как принятую для будущих посетителей. – Purag

+0

Я пытался отмечать его каждую минуту, а в пятом я, наконец, мог отметить ваш ответ! LoL, я думаю, моя проблема в том, что я не знал проблемы. – FoxKllD

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

Thnx man! Вы показали мне еще один способ сделать то, что я хотел сделать. Я очень ценю это. – FoxKllD

+0

Очень приятное, элегантное решение. –

2

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

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