1

我需要添加一个 jQuery 检查,它将启动我网站上的任何链接到外部网站。我该如何执行以下操作:

查找主机名中不包含“xyz”的任何锚链接。例如:

  • http://xyz.com
  • http://asfasdfadsfadsf.xyz.com

它必须忽略主机名后包含 xyz 的任何链接:

  • http://someothersite.com/xyz
$('a[href^="http://%xyz%"]').filter(function() {
  return this.hostname && this.hostname !== location.hostname;
}).attr('target', '_blank');  
4

3 回答 3

2
!(/https?:\/\/[^\/]*xyz.*/i.test(link))

请参阅此演示


JSHint示例:

/*global $:false */

(function() {

  "use strict";

  $('a').filter(function() {
    return !(/https?:\/\/[^\/]*xyz.*/i.test($(this).attr('href')));
  }).text("***");

}());
于 2012-11-28T17:01:19.087 回答
0

一种方法是获取所有锚链接并通过每个href应用此正则表达式(?:xyz.)。如果存在正则表达式,这意味着 URL 是错误的,则将其他所有内容推入数组中,然后对它们做任何你想做的事情。

于 2012-11-28T16:59:10.990 回答
0

这可能会做到。您可能可以进行一些优化:

$("a").each(function(idx, link) {
    var href = link.href;
    if (!href) {return;}
    href = href.split("//");
    if (href.length < 2) {return;}
    href = href[1];
    var index = href.indexOf("/");
    if (index > -1) {
        href = href.substring(0, index);
    }
    if (!/\bxyz\b/g.test(href)) {
        link.target = "_blank";
    }
});
于 2012-11-28T18:23:16.413 回答