富豪URI

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());

http://gist.github.com/77946

パースにElement作るところが富豪的。IE以外ならたぶん動く。
baseの部分はnanto_vi先生がAutoPagerizeに送ったパッチより。
URI#get_paramはもうちょっと頑張れな実装…。パラメータは配列でほしかったり、ハッシュでほしかったり色々だよね、ってことで全のせに。

ちなみに、元ネタといえなくもないのがParsing URLs with the DOM! – James Padolseyのあたり。