targetを使わず外部リンクを新しいウインドウで開く

カテゴリー:jQuery

StrictなHTMLを目指す場合、リンクのtarget指定はあまり使いたくありません。
そこで、異論はあると思いますが、外部リンクの場合はすべて新しいウインドウで開くようにするスクリプトを作ってみました。なんだかちょっと無理矢理な感じがします…もうちょっとスマートなやり方がありそうなもんですが…。
ちなみに、ウチのサイトに実装してみました。チョットしたお試しです。

スクリプトのbaseUrlのところに、サイトルートのURIをいれてください。
(ホントは、baseタグを参照するといいんでしょうけど、ない場合がほとんどなので…)
http://から始まり、かつbaseUrlに入れたURLから始まらないリンクはすべてポップアップするようになります。

ポップアップブロックされてる場合はどうなるんだろう?

追記

またEmotional Webを参考にさせていただいて修正しました。

一つめの"a[@href^=http//]"は、「hrefという属性の値がhttp://からはじまるaタグ」と言う意味になります。
詳しくは、Supported, but differentを参照。

E[@foo^=bar] an E element whose "foo" attribute value begins exactly with the string "bar"

そして、そのあとに続くnot以降は、上記の条件を満たしたaタグの中から更に「href属性が変数baseUrlの中身のテキストからはじまるもの以外」と言う条件に当てはまるものを選び出す書き方です。
詳しくは、not( el )参照。

Removes the specified Element from the set of matched elements. This method is used to remove a single Element from a jQuery object.

つまり、両方合わせて「http://から始まり、なおかつ自分トコのURLではないリンク」という条件を作っているわけです。

スクリプト


$(document).ready(function() {
 var baseUrl = "http://www.kadoyan.com/";
 //
 $("a[@href^=http://]").not("[@href^="+baseUrl+"]").click(function() {
   window.open($(this).attr("href"));
   return false;
 });
});

2007年6月17日(日曜日)/09時32分 - kadoyan -
Yahoo!ブックマークに登録Yahoo!ブックマークに登録はてなブックマークに追加はてなブックマークに追加

トラックバックURL:

%3c%69%6e%70%75%74%20%74%79%70%65%3d%22%68%69%64%64%65%6e%22%20%6e%61%6d%65%3d%22%6e%70%5f%70%72%6f%74%65%63%74%62%79%6d%64%35%22%20%76%61%6c%75%65%3d%22%33%61%37%64%34%35%39%61%61%30%63%39%66%33%64%63%36%38%39%34%37%33%62%30%34%39%63%63%34%66%66%63%22%3e %3c%69%6e%70%75%74%20%74%79%70%65%3d%22%68%69%64%64%65%6e%22%20%6e%61%6d%65%3d%22%6e%70%5f%70%72%6f%74%65%63%74%62%79%6d%64%35%5f%68%61%73%68%22%20%76%61%6c%75%65%3d%22%38%66%63%62%38%34%34%39%32%31%30%63%31%33%38%30%66%63%32%34%62%62%63%34%38%32%31%61%30%63%38%62%22%3e
CATEGORY