用JavaScript获取一个超链接的绝对URL地址 客官°小女子只卖身不卖艺 2021-06-24 14:34 312阅读 0赞 转自:[http://www.webhek.com/get-absolute-url][http_www.webhek.com_get-absolute-url] 对于Web程序员来说,处理简单的URL格式也许会成为一场噩梦。试想一下,一个网址里有很多组成部分都会影响你对它的解析方法: * 是否以`/`字符开头 * 是否以`//`开头 * 是否以`?`号开头 * 是否以`#`号开头 * …等等 当你想要这个地址的绝对地址时,如何判断处理和解析?它有可能是`http`协议的,还可能是`https`协议的。够头痛吧。幸运的是,我们有个简单的方法来确定它的绝对地址,就是创建一个`A`元素来辅助完成这个任务! ## JavaScript代码 ## var getAbsoluteUrl = (function() { var a; return function(url) { if(!a) a = document.createElement('a'); a.href = url; return a.href; }; })(); 这个函数看起来有些复杂,它先将一个函数赋予一个变量,而这个函数里有另外一个函数,还有一个预先定义的变量。有人可能会问,为什么要内嵌一个函数,是否可以简化成这样: var getAbsoluteUrl = function(url) { var a = document.createElement('a'); a.href=url; return a.href; } 当然这种简单的写法也不能算错,但不够完美,因为内嵌一个函数的做法虽然增加了代码的复杂度,但它能保证`A`元素只被创建一次,而且可以重复利用,这样节省了时间和内存。 也许有人会提出另外一个问题,疑惑嵌套的第二个函数里有个`if`判断,为什么需要它,干嘛不写成下面这样: var getAbsoluteUrl = (function() { var a = document.createElement('a'); return function(url) { a.href = url; return a.href; }; })(); 这自然也是一种可以运行的写法,而且功能不会有任何错误。但微妙的是,如果没有`if`判断语句,在定义这个函数的时候,即使这个函数没有被任何代码调用,`A`元素也会被初始化,而有了`if`判断语句,`A`元素会在被实际用到时才被创建,不会浪费内存和CPU。 好了,有了这个方法,不论你传入它的是什么样的URL地址,它都会返回绝对地址。试一下吧! [http_www.webhek.com_get-absolute-url]: http://www.webhek.com/get-absolute-url
还没有评论,来说两句吧...