JavaScript 开发中有时需要获取绝对 URL,图片可以使用 img.src 返回绝对路径,一些以字符串形式存储的 URL 的则处理起来会比较繁琐,比如:

  • / 或者不以 / 开头的;
  • // 相对协议的;
  • ? 开头的;
  • # 开头的;
  • ……

借助 a 元素可以很方便的解决这个问题:

var getAbsoluteUrl = (function() {
  var a;

  return function(url) {
    a = a || document.createElement('a');
	a.href = url;

	return a.href;
  };
})();

之所以这样写,是基于性能考虑:调用时只会创建一个 a 元素。

也可以给 String 对象扩展一个方法(个人不喜欢这样):

(function(a){

  String.prototype.toURL = function(){
    a.href = this;
    return this;
  };

})(document.createElement('a'));

有兴趣的同学也可以关注一下还在制定中的 URL() API

via Get an Absolute URL with JavaScript