javascript将相对路径转绝对路径示例


Posted in Javascript onMarch 14, 2014

这里介绍的其实本质上是两种方法,通过创建DOM或通过JavaScript计算:

1)通过新创建的Image, 经测试会发送一个Aborted的请求,并且IE6不支持, 将new Image改成document.createElement('IMG')也是一样的;测试应该不喜欢这个方案;

function getAbsoluteUrl(url){
    var img = new Image();
    img.src = url;  // 设置相对路径给Image, 此时会发送出请求
    url = img.src;  // 此时相对路径已经变成绝对路径
    img.src = null; // 取消请求
    return url;
}
getAbsoluteUrl("showroom/list");

2)创建Anchor(链接),这种方法不会发出任何请求(请求会在加入DOM时产生),但是IE6也不支持

/*jslint regexp: true, white: true, maxerr: 50, indent: 2 */function parseURI(url) {
  var m = String(url).replace(/^\s+|\s+$/g, '').match(/^([^:\/?#]+:)?(\/\/(?:[^:@]*(?::[^:@]*)?@)?(([^:\/?#]*)(?::(\d*))?))?([^?#]*)(\?[^#]*)?(#[\s\S]*)?/);
  // authority = '//' + user + ':' + pass '@' + hostname + ':' port
  return (m ? {
    href     : m[0] || '',
    protocol : m[1] || '',
    authority: m[2] || '',
    host     : m[3] || '',
    hostname : m[4] || '',
    port     : m[5] || '',
    pathname : m[6] || '',
    search   : m[7] || '',
    hash     : m[8] || ''
  } : null);
}
function absolutizeURI(base, href) {// RFC 3986
  function removeDotSegments(input) {
    var output = [];
    input.replace(/^(\.\.?(\/|$))+/, '')
         .replace(/\/(\.(\/|$))+/g, '/')
         .replace(/\/\.\.$/, '/../')
         .replace(/\/?[^\/]*/g, function (p) {
      if (p === '/..') {
        output.pop();
      } else {
        output.push(p);
      }
    });
    return output.join('').replace(/^\//, input.charAt(0) === '/' ? '/' : '');
  }
  href = parseURI(href || '');
  base = parseURI(base || '');
  return !href || !base ? null : (href.protocol || base.protocol) +
         (href.protocol || href.authority ? href.authority : base.authority) +
         removeDotSegments(href.protocol || href.authority || href.pathname.charAt(0) === '/' ? href.pathname : (href.pathname ? ((base.authority && !base.pathname ? '/' : '') + base.pathname.slice(0, base.pathname.lastIndexOf('/') + 1) + href.pathname) : base.pathname)) +
         (href.protocol || href.authority || href.pathname ? href.search : (href.search || base.search)) +
         href.hash;
}

因我们的产品为手机端网页,早已不支持IE6,最终使用的是第二种方案;

由此可见,用原生态的方法访问所有的Image, Anchor时,返回的都是绝对路径,此时如果想返回原来的相对路径,可以用查询DOM的方法,如jQuery.attr()方法:

//返回绝对路径,jQuery对象实质上是"类数组"结构(类似arguments),因此使用[0]可以访问到原生态的对象,然后取"href";
console.log($anchor[0]["href"]);
//返回原始路径
console.log($anchor.attr("href"));
Javascript 相关文章推荐
JavaScript高级程序设计 阅读笔记(十八) js跨平台的事件
Aug 14 Javascript
js实现右下角可关闭最小化div(可用于展示推荐内容)
Jun 24 Javascript
自动设置iframe大小的jQuery代码
Sep 11 Javascript
jQuery产品间断向下滚动效果核心代码
May 08 Javascript
jQuery背景插件backstretch使用指南
Apr 21 Javascript
分享我对JS插件开发的一些感想和心得
Feb 04 Javascript
jQuery unbind 删除绑定事件详解
May 24 Javascript
详细分析jsonp的原理和实现方式
Nov 20 Javascript
vue中添加mp3音频文件的方法
Mar 02 Javascript
Vue实现用户自定义字段显示数据的方法
Aug 28 Javascript
微信小程序结合Storage实现搜索历史效果
May 18 Javascript
基于Node的Axure文件在线预览的实现代码
Aug 28 Javascript
Node.js和PHP根据ip获取地理位置的方法
Mar 14 #Javascript
弹出窗口并且此窗口带有半透明的遮罩层效果
Mar 13 #Javascript
javascript回车完美实现tab切换功能
Mar 13 #Javascript
javasciprt下jquery函数$.post执行无响应的解决方法
Mar 13 #Javascript
JQuery中extend使用介绍
Mar 13 #Javascript
js中用window.open()打开多个窗口的name问题
Mar 13 #Javascript
javascript获取浏览器类型和版本的方法(js获取浏览器版本)
Mar 13 #Javascript
You might like
支持数组的ADDSLASHES的php函数
2010/02/16 PHP
php中如何使对象可以像数组一样进行foreach循环
2013/08/09 PHP
PHP通过串口实现发送短信
2015/07/08 PHP
PHP远程连接oracle数据库操作实现方法图文详解
2019/04/11 PHP
js 学习笔记(三)
2009/12/29 Javascript
JS常用表单验证方法总结
2014/05/22 Javascript
JavaScript中Number.MAX_VALUE属性的使用方法
2015/06/04 Javascript
JS实现Fisheye效果动感放大菜单代码
2015/10/21 Javascript
JavaScript中的函数(二)
2015/12/23 Javascript
Angular2 (RC5) 路由与导航详解
2016/09/21 Javascript
jquery单击文字或图片内容放大并居中显示
2017/06/23 jQuery
vue使用iframe嵌入网页的示例代码
2020/06/09 Javascript
vue路由对不同界面进行传参及跳转的总结
2019/04/20 Javascript
如何基于JavaScript判断图片是否加载完成
2019/12/28 Javascript
在vue中动态修改css其中一个属性值操作
2020/12/07 Vue.js
python使用paramiko模块实现ssh远程登陆上传文件并执行
2014/01/27 Python
python中查看变量内存地址的方法
2015/05/05 Python
利用PyInstaller将python程序.py转为.exe的方法详解
2017/05/03 Python
python集合比较(交集,并集,差集)方法详解
2018/09/13 Python
python 读取竖线分隔符的文本方法
2018/12/20 Python
python3使用flask编写注册post接口的方法
2018/12/28 Python
利用python实现在微信群刷屏的方法
2019/02/21 Python
CSS3打造百度贴吧的3D翻牌效果示例
2017/01/04 HTML / CSS
三星美国官网:Samsung美国
2017/02/06 全球购物
全球航班旅行搜索网站:Cheapflights
2017/05/19 全球购物
北欧最好的童装网上商店:Babyshop
2019/09/15 全球购物
汽车维修专业毕业生的求职信分享
2013/12/04 职场文书
导游的职业规划书范文
2013/12/27 职场文书
应届毕业生求职信范文
2014/07/07 职场文书
2014基层党员批评与自我批评范文
2014/09/24 职场文书
2014年街道办事处工作总结
2014/12/11 职场文书
租赁协议书
2015/01/27 职场文书
自主招生自荐信格式范文
2015/03/25 职场文书
神秘岛读书笔记
2015/07/01 职场文书
Nginx的gzip相关介绍
2022/05/11 Servers
javascript进阶篇深拷贝实现的四种方式
2022/07/07 Javascript