var comp = new RegExp(location.host);
$('a').each(function(){
if(comp.test($(this).attr('href'))){
// a link that contains the current host
$(this).addClass('local');
}
else{
// a link that does not contain the current host
$(this).addClass('external');
}
});
Примечание: это просто быстрый и грязный пример. Это будет соответствовать всем ссылкам href = "# anchor"
как внешний тоже. Это можно улучшить, выполнив дополнительную проверку RegExp.
Обновление 2016-11-17
Этот вопрос по-прежнему пользуется большим спросом, и мне сказали кучу людей, что это принятое решение несколько раз проваливалось. Как я уже говорил, это был очень быстрый и грязный ответ, показывающий принципиальный способ решения этой проблемы. Более сложным решением является использование свойств, доступных для элемента <a>
(привязка). Как @Daved уже указывал в этом ответе, ключ должен сравнить hostname
с текущим window.location.hostname
. Я бы предпочел сравнить свойства hostname
, поскольку они никогда не включают port
, который включен в свойство host
, если оно отличается от 80.
Итак, поехали:
$( 'a' ).each(function() {
if( location.hostname === this.hostname || !this.hostname.length ) {
$(this).addClass('local');
} else {
$(this).addClass('external');
}
});
Уровень техники:
Array.from( document.querySelectorAll( 'a' ) ).forEach( a => {
a.classList.add( location.hostname === a.hostname || !a.hostname.length ? 'local' : 'external' );
});