对于Web程序员来说,处理简单的URL格式也许会成为一场噩梦。试想一下,一个网址里有很多组成部分都会影响你对它的解析方法:

  • 是否以/字符开头
  • 是否以//开头
  • 是否以?号开头
  • 是否以#号开头
  • …等等

当你想要这个地址的绝对地址时,如何判断处理和解析?它有可能是http协议的,还可能是https协议的。够头痛吧。幸运的是,我们有个简单的方法来确定它的绝对地址,就是创建一个A元素来辅助完成这个任务!

JavaScript代码

这里我将使用一个返回函数的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地址,它都会返回绝对地址。试一下吧!

转载于:https://www.cnblogs.com/rookieCat/p/4680039.html

用JavaScript获取一个超链接的绝对URL地址相关推荐

  1. javascript 获取上一页的url

    在js中,如果通过连接或者表单提交里,可以用以下三种方式获取上一页的url: 1.document.referrer 2.top.document.referrer 3.window.parent.d ...

  2. java 获取域名_Java获取域名,Java从URL地址中获取域名,Java从Request 获取域名

    Java  获取主域名方法有很多种,有的用截串方式,我用的一个投机取巧的方式,这个获取域名的方法比较简单,代码也较少. Java从URL地址中获取域名//这样获取的方式,不请求就能获取到域名 URL ...

  3. 通过文件url地址获取base64;通过图片url地址获取base64;js获取文件的base64

    本篇是通过url地址获取文件的base64 如果想要通过File文件获取base64查看这篇 以下代码可直接复制使用!注意第9行的图片地址更改下 <template><div cla ...

  4. SAP PLM CVAPI_DOC_VIEW 获取DMS文档原件URL地址示例(Originals File)

    获取SAP PLM DMS原件URL,在OA等系统查看原件设计图纸Excel文档等 ◆◆ 前言 ◆◆ 原件文件名存储位置 ◆◆ 示例代码 ◆◆ 前言 先放出官方相关知识介绍,有兴趣的可以研究一下:SA ...

  5. PHP $_SERVER['HTTP_REFERER'] 获取前一页面的 URL 地址

    转载:www.5idev.com/p-php_serve- 使用 $_SERVER['HTTP_REFERER'] 将很容易得到链接到当前页面的前一页面的地址.一个例子如下: index.php(实际 ...

  6. 用java获取360doc页面上的url地址并在浏览器中自动打开

    一.前言 最近在看一些前端的文章360doc,每次选中需要的url,都会弹出一个提示框,然后关闭后又自动转发到另一个页面,让人觉的很烦,于是便有了下面这个想法的产生. 二.java实现获取指定页面ur ...

  7. 微信小程序扫码的代码及获取二维码的url地址

    <view bindtap="scanCode">点击扫码</view> scanCode: function (options) { var that = ...

  8. 获取当前网页的绝对URL地址

    通过创建一个虚拟的<a></a>元素,将它的href指定为相对URL,再读取它的href就会得到绝对URL. var getAbsoluteUrl = (function() ...

  9. 安卓手机能提取当前页面的链接吗_如何获取一个app内的网页地址?

    最近有一个合作商,所有的操作只能用手机登录App操作,特别是打字文本编译,比电脑累太多了,为了发扬如何偷懒,决定把App内网页转到PC上,Let's go. 查了一下知乎上都没有理想的解答,我动手写一 ...

最新文章

  1. java连接数据库不使用框架_实体框架数据库连接不重新连接
  2. hadoop hdfs总结 NameNode部分 1
  3. leetcode1282. 用户分组(贪心算法)
  4. 前端学习(3168):react-hello-react之...扩展运算符
  5. HTML 视频和音频
  6. [Linux学习笔记] Linux常用命令 - 文件搜索命令
  7. Oracle Instance
  8. scala中getorElse()方法
  9. python自动化办公都能做什么-用 Python 自动化办公,我与大神之间的差距一下就...
  10. mac下加速下载百度云资源
  11. Java实现阿里云短信验证码发送
  12. 互联网金融数据分析指标
  13. ECCV 2022 | 谷歌提出:k-means Mask Transformer
  14. Java Mysql工具类封装
  15. 排序算法总结(Python实现)——(一)
  16. 【蓝桥杯真题训练 day14】今日四道真题全解析
  17. 电信物联网平台,java后台对接电信北向应用,订阅平台消息
  18. 计算机寸出,电脑显示器长31cm宽23cm是多少寸?
  19. int 长度 mysql_MySQL int 类型的长度和范围解惑
  20. 阿里在数据库智能优化路上_做了哪些探索与实践?

热门文章

  1. uefi怎么添加linux启动项,LINUX下EFIBOOTMGR的使用,删除UEFI主板多余启动项和添加启动项...
  2. python特效进度条_六种酷炫Python运行进度条
  3. java which语句,java入门之表达式、语句、块
  4. java录排名怎么写_面试官:Java排名靠前的工具类你都用过哪些?
  5. 字符串反转python_python字符串反转的四种方法详解
  6. vsftp pam mysql_VSFTP+MySQL+PAM
  7. android+邮箱删除邮件,在Android上删除烦人的语音邮件通知 | MOS86
  8. 机器学习中使用的交叉熵(cross entropy)透彻分析
  9. Opencv函数手册
  10. keras 的 example 文件 cifar10_resnet.py 解析