アンカーのhrefに含まれる拡張子やスキームに応じたアイコンを表示するっていうのはCSSでよくあるけど、
ドメインに応じてfaviconと同じアイコン表示するのは見たことがない。
どこのサイトか判別するなら大体こんなパターンが考えられる:
- www.sitename.com … 真ん中にサイト名
- sitename.com … 先頭にサイト名
- service.sitename.co.jp … サービス名+サイト名
- site.name … ドット無くすとサイト名
その理屈をjavascriptの正規表現でやっつけてみたのが次のソースです。
var TextlinksAddClass = function(target,title){ this.target = target || document; this.title = title; this.start = function(){ var anc = this.target.getElementsByTagName("a"); for(i=0; i<anc.length; i++){ this.setClass(anc[i],anc[i].href); } }; this.setClass = function(a,href){ //[all,protocol,domain,extention] var matches = href.match(/^(?:([^\:\/\?#]+)\:)?(?:\/\/(?:[\w\d]+\.)?([^\/\.#=&]+)\.(?:[^\.\/]+)(?:\.[^\/\?#\.]+)*)?(?:(?:[^\?#])*)(?:\?(?:[^#]*))?(?:#(?:.*\.(\w+)))?/i); var class = this._getClass(matches[1],matches[2],matches[3]); a.className = (a.className? a.className+' ':'')+class; if(this.title) a.title = class; }; this._getClass = function(p,d,e){ if(p=="mailto"||p=="callto"||p=="msnim"||p=="xmpp"||p=="aim"||p=="icq"||p=="skype"||p=="gg"||p=="https"){ return p; }else if(e){ return e; }else if(d){ return d; } }; this.start(); }[/js] <a href="http://jsdo.it/Tenderfeel/lVtC">View Demo »</a> del.icio.usみたいなドット無くすとサイト名になるものは判別してない。 上記はアンカーにclassとtitleを付与するものですが、改変して createElement("img")やstyle.backgroundでclass+'.png'とかすれば自動的にアイコンの挿入が出来る。 アンテナサイトとかで使えるかも。 <span id="more-878"></span> <h2>正規表現を分割してみる</h2> 全文: [js] /^(?:([^\:\/\?#]+)\:)?(?:\/\/(?:[\w\d]+\.)?([^\/\.#=&]+)\.(?:[^\.\/]+)(?:\.[^\/\?#\.]+)*)?(?:(?:[^\?#])*)(?:\?(?:[^#]*))?(?:#(?:.*\.(\w+)))?/i
^(?:([^\:\/\?#]+)\:)?
http:まで(?:\/\/(?:[\w\d]+\.)?([^\/\.#=&]+)\.(?:[^\.\/]+)(?:\.[^\/\?#\.]+)*)?
ドメイン(?:(?:[^\?#])*)
ドメイン~?の手前(?:\?(?:[^#]*))?
?以下~#の手前(?:#(?:.*\.(\w+)))?
#以下と拡張子
?:は記憶しない指定なので消せばマッチした部分が取り出せる。