富豪URI
function URI(uri,base){ var a, _loc = location, self = this; if (base) {//via nanto_vi var XHTML_NS = "http://www.w3.org/1999/xhtml"; var XML_NS = "http://www.w3.org/XML/1998/namespace"; a = document.createElementNS(XHTML_NS, 'a'); a.setAttributeNS(XML_NS, 'xml:base', base); } else if (URI.cache) { a = URI.cache; } else { a = URI.cache = document.createElement('a'); } a.href = uri; for (var k in _loc) if (a[k] !== void 0) this[k] = a[k]; } URI.prototype.toString = function(){ return this.href; }; URI.prototype.get_param = function(){ if (this.param) return this.param; var res = {}, keys = [], values = []; this.search.substring(1).split('&').forEach(function(q){ var p = q.split('='); res[p[0]] = p[1]; keys.push(p[0]); values.push(p[1]); }); return (this.param = {hash:res,keys:keys,values:values}); };
var u=new URI('../hoge?a=2&d=4','http://ss-o.net/test/'); console.log(u, u.get_param());
パースにElement作るところが富豪的。IE以外ならたぶん動く。
baseの部分はnanto_vi先生がAutoPagerizeに送ったパッチより。
URI#get_paramはもうちょっと頑張れな実装…。パラメータは配列でほしかったり、ハッシュでほしかったり色々だよね、ってことで全のせに。
ちなみに、元ネタといえなくもないのがParsing URLs with the DOM! – James Padolsey、のあたり。