Jquery外部链接与else if语句

时间:2015-05-05 15:57:15

标签: jquery hyperlink external addclass

我有这个工具,它使用本地页面的硬链接和相对链接。 (我没有构建它)我现在需要对外部链接进行分类。试过这个,但它被卡在'else if'级别。我究竟做错了什么?如果没有'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');
    }    
});

1 个答案:

答案 0 :(得分:3)

您现有的代码无效,应显示控制台错误,因为以下内容不是有效表达式:

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 expression or jQuery selector to NOT match "external" links in href