这篇文章主要为大家详细介绍了一个非常巧妙的方法,JavaScript 如何获取超链接的绝对 URL 地址,感兴趣的小伙伴们可以参考一下
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
对于 web 程序员来说,处理简单的 URL 格式也许会成为一场噩梦。试想一下,一个网址里有很多组成部分都会影响你对它的解析方法:
···· 是否以 / 字符开头
···· 是否以 // 开头
···· 是否以? 号开头
···· 是否以 #号开头
… 等等
当你想要这个地址的绝对地址时,如何判断处理和解析?它有可能是 http 协议的,还可能是 https 协议的。够头痛吧。幸运的是,我们有个简单的方法来确定它的绝对地址,就是创建一个 A 元素来辅助完成这个任务!
JavaScript 代码
这里我将使用一个 {aa0aa},这样做有很多好处,下面会讲。
- 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.phperz.com/article/17/0305/264876.html