Внешние ссылки Jquery с оператором else if

У меня есть этот инструмент, который использует как жесткие, так и относительные ссылки для локальных страниц. (Я его не строил) Теперь мне нужно классифицировать внешние ссылки. Пробовал с этим, но он застревает на уровне «иначе, если». Что я делаю не так? Без «иначе, если» некоторые локальные ссылки ошибочно помечаются как внешние, но с ним ничего не происходит.

jQuery(document).ready(function() {
    var comp = new RegExp(location.host);
    jQuery('a').each(function(){
        if(comp.test(jQuery(this).attr('href'))) {
            jQuery(this).addClass('local');
        }
        else if(jQuery(this)('a[href$="ABC"]')) {
            jQuery(this).addClass('local2');
        }
        else {
        jQuery(this).addClass('external');
    }    
});

person Dave Able    schedule 05.05.2015    source источник
comment
ваш js содержит ошибки, что вы получаете в своей консоли?   -  person atmd    schedule 05.05.2015


Ответы (1)


Ваш существующий код недействителен и должен отображать ошибку консоли, поскольку следующее выражение не является допустимым:

jQuery(this)('a[href$="ABC"]')

Поскольку вам обычно нужно идентифицировать только внешние ссылки, а любые внутренние ссылки обрабатываются одинаково (абсолютно или относительно), у меня есть этот селектор jQuery, который будет соответствовать всем возможным внешним ссылкам (включая ссылки на электронную почту и файлы и т. д.). ):

'a[href*="://"]:not(a[href^="' + window.location.protocol + '//' + window.location.hostname + '"]),a[href^="mailto:"]'

JSFiddle: http://jsfiddle.net/TrueBlueAussie/qxn8L86a/10/

Упрощенная версия (если на вашем сайте нет абсолютных локальных ссылок):

$('a[href*="://"],a[href^="mailto:"]').addClass("external");

JSFiddle: http://jsfiddle.net/TrueBlueAussie/qxn8L86a/8/

Чтобы добавить класс к локальным ссылкам, вы можете просто исключить внешние:

e.g.

$('a').not($('a[href*="://"],a[href^="mailto:"]').addClass("external")).addClass("local");

JSFiddle: http://jsfiddle.net/TrueBlueAussie/qxn8L86a/9/

Ссылка (мой вопрос) здесь: RegEx выражение или селектор jQuery НЕ соответствуют внешним ссылкам в href

person Gone Coding    schedule 05.05.2015
comment
почему хештег внешняя ссылка? - person Mephiztopheles; 06.05.2015
comment
@Mephiztopheles: Остаток от другого проекта - здесь не нужен, поэтому теперь удален (и _blank тоже удален, так как этот вопрос будет считаться локальным). См. связанный вопрос о том, что он делал. - person Gone Coding; 06.05.2015