使用jQuery检查链接是内部链接还是外部链接

chr*_*ism 11 jquery

我想写一个脚本,可以确定链接是内部链接还是外部链接.从我的角度来看这很简单,所有内部链接都是相对的,因此它们以/开头.所有外部链接都以http://开头 - 到目前为止一切都很好.但是我无法弄清楚如何在除文本之外的任何内容上执行':contains()' - 如何在属性中搜索字符串?

一旦我能做到这一点,我很高兴自己添加target _blank,除非你知道更好的方法

Pat*_*ney 22

您可以使用attribute^=value语法查找以http或开头的href /:

$("a[href^='http']") // external

$("a[href^='/']") // internal
Run Code Online (Sandbox Code Playgroud)

这是一个更好的解决方案:您可以使用下面的插件代码添加$('a:external')和$('a:internal')选择jQuery.任何开头http://,https://或被whatever://视为外部的URL .

    $.expr[':'].external = function (a) {
        var PATTERN_FOR_EXTERNAL_URLS = /^(\w+:)?\/\//;
        var href = $(a).attr('href');
        return href !== undefined && href.search(PATTERN_FOR_EXTERNAL_URLS) !== -1;
    };

    $.expr[':'].internal = function (a) {
        return $(a).attr('href') !== undefined && !$.expr[':'].external(a);
    };
Run Code Online (Sandbox Code Playgroud)

  • 我是否正确地说内部网址并不总是以正斜杠开头.对内部使用$('a [href!= http:] a [href!= https:]')可能更好. (9认同)
  • 使用协议相对URL会失败,例如`// www.google.com`. (3认同)
  • 你可以用 `/^(\w+:)?\/\//` 来修复它 (2认同)

Dom*_*c P 8

我正在为我的CMS使用WordPress,因此大多数(如果不是全部)我的内部链接都以"http"开头.我在这里找到了一个非常有趣的解决方案:http://www.focal55.com/blog/jquery-tutorial-add-class-all-outbound-links-your-site

如果网站关闭,它基本上归结为这个选择器(我修改了一下):

$( 'a[href^="//"],a[href^="http"]' )
    .not( '[href*="' + window.location.hostname + '"]' )
;
Run Code Online (Sandbox Code Playgroud)

请注意,根据jQuery文档,此选择器不会是最快的.