1

サイト全体から外部の Web サイトへのリンクを起動する 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

それを行う 1 つの方法は、すべてのアンカー リンクを取得し、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 に答える