用JavaScript获取一个超链接的绝对URL地址
对于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地址相关推荐
- javascript 获取上一页的url
在js中,如果通过连接或者表单提交里,可以用以下三种方式获取上一页的url: 1.document.referrer 2.top.document.referrer 3.window.parent.d ...
- java 获取域名_Java获取域名,Java从URL地址中获取域名,Java从Request 获取域名
Java 获取主域名方法有很多种,有的用截串方式,我用的一个投机取巧的方式,这个获取域名的方法比较简单,代码也较少. Java从URL地址中获取域名//这样获取的方式,不请求就能获取到域名 URL ...
- 通过文件url地址获取base64;通过图片url地址获取base64;js获取文件的base64
本篇是通过url地址获取文件的base64 如果想要通过File文件获取base64查看这篇 以下代码可直接复制使用!注意第9行的图片地址更改下 <template><div cla ...
- SAP PLM CVAPI_DOC_VIEW 获取DMS文档原件URL地址示例(Originals File)
获取SAP PLM DMS原件URL,在OA等系统查看原件设计图纸Excel文档等 ◆◆ 前言 ◆◆ 原件文件名存储位置 ◆◆ 示例代码 ◆◆ 前言 先放出官方相关知识介绍,有兴趣的可以研究一下:SA ...
- PHP $_SERVER['HTTP_REFERER'] 获取前一页面的 URL 地址
转载:www.5idev.com/p-php_serve- 使用 $_SERVER['HTTP_REFERER'] 将很容易得到链接到当前页面的前一页面的地址.一个例子如下: index.php(实际 ...
- 用java获取360doc页面上的url地址并在浏览器中自动打开
一.前言 最近在看一些前端的文章360doc,每次选中需要的url,都会弹出一个提示框,然后关闭后又自动转发到另一个页面,让人觉的很烦,于是便有了下面这个想法的产生. 二.java实现获取指定页面ur ...
- 微信小程序扫码的代码及获取二维码的url地址
<view bindtap="scanCode">点击扫码</view> scanCode: function (options) { var that = ...
- 获取当前网页的绝对URL地址
通过创建一个虚拟的<a></a>元素,将它的href指定为相对URL,再读取它的href就会得到绝对URL. var getAbsoluteUrl = (function() ...
- 安卓手机能提取当前页面的链接吗_如何获取一个app内的网页地址?
最近有一个合作商,所有的操作只能用手机登录App操作,特别是打字文本编译,比电脑累太多了,为了发扬如何偷懒,决定把App内网页转到PC上,Let's go. 查了一下知乎上都没有理想的解答,我动手写一 ...
最新文章
- java连接数据库不使用框架_实体框架数据库连接不重新连接
- hadoop hdfs总结 NameNode部分 1
- leetcode1282. 用户分组(贪心算法)
- 前端学习(3168):react-hello-react之...扩展运算符
- HTML 视频和音频
- [Linux学习笔记] Linux常用命令 - 文件搜索命令
- Oracle Instance
- scala中getorElse()方法
- python自动化办公都能做什么-用 Python 自动化办公,我与大神之间的差距一下就...
- mac下加速下载百度云资源
- Java实现阿里云短信验证码发送
- 互联网金融数据分析指标
- ECCV 2022 | 谷歌提出:k-means Mask Transformer
- Java Mysql工具类封装
- 排序算法总结(Python实现)——(一)
- 【蓝桥杯真题训练 day14】今日四道真题全解析
- 电信物联网平台,java后台对接电信北向应用,订阅平台消息
- 计算机寸出,电脑显示器长31cm宽23cm是多少寸?
- int 长度 mysql_MySQL int 类型的长度和范围解惑
- 阿里在数据库智能优化路上_做了哪些探索与实践?
热门文章
- uefi怎么添加linux启动项,LINUX下EFIBOOTMGR的使用,删除UEFI主板多余启动项和添加启动项...
- python特效进度条_六种酷炫Python运行进度条
- java which语句,java入门之表达式、语句、块
- java录排名怎么写_面试官:Java排名靠前的工具类你都用过哪些?
- 字符串反转python_python字符串反转的四种方法详解
- vsftp pam mysql_VSFTP+MySQL+PAM
- android+邮箱删除邮件,在Android上删除烦人的语音邮件通知 | MOS86
- 机器学习中使用的交叉熵(cross entropy)透彻分析
- Opencv函数手册
- keras 的 example 文件 cifar10_resnet.py 解析