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 onkeydown,onkeyup,onkeypress,onclick,ondblclick
Feb 04 Javascript
js综合应用实例简单的表格统计
Sep 03 Javascript
jquery左右全屏大尺寸多图滑动效果代码分享
Aug 28 Javascript
原生JavaScript制作微博发布面板效果
Mar 11 Javascript
javascript数据结构之串的概念与用法分析
Apr 12 Javascript
jQuery使用正则验证15/18身份证的方法示例
Apr 27 jQuery
React进阶学习之组件的解耦之道
Aug 07 Javascript
Vue 进入/离开动画效果
Dec 26 Javascript
Router解决跨模块下的页面跳转示例
Jan 11 Javascript
微信小程序实现换肤功能
Mar 14 Javascript
webpack配置打包后图片路径出错的解决
Apr 26 Javascript
Node.js Windows Binary二进制文件安装方法
May 16 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
PHP 学习路线与时间表
2010/02/21 PHP
php查看网页源代码的方法
2015/03/13 PHP
Yii 2.0如何使用页面缓存方法示例
2017/05/23 PHP
老生常谈PHP面向对象之标识映射
2017/06/21 PHP
Ubuntu彻底删除PHP7.0的方法
2018/07/27 PHP
js怎么终止程序return不行换jfslk
2013/05/30 Javascript
JQuery插件开发示例代码
2013/11/06 Javascript
基于javascript实现图片左右切换效果
2016/01/25 Javascript
JQuery ztree 异步加载实例讲解
2016/02/25 Javascript
dul无法加载bootstrap实现unload table/user恢复
2016/09/29 Javascript
JS判断两个对象内容是否相等的方法示例
2017/04/10 Javascript
浅谈在fetch方法中添加header后遇到的预检请求问题
2017/08/31 Javascript
vue 引入公共css文件的简单方法(推荐)
2018/01/20 Javascript
React diff算法的实现示例
2018/04/20 Javascript
浅谈Vue.use的使用
2018/08/29 Javascript
JS实现随机抽选获奖者
2019/11/07 Javascript
用vue写一个日历
2020/11/02 Javascript
[08:04]TI4西雅图DOTA2前线报道 海涛探访各路人马
2014/07/09 DOTA
Python使用cx_Oracle模块将oracle中数据导出到csv文件的方法
2015/05/16 Python
Python使用base64模块进行二进制数据编码详解
2018/01/11 Python
Python进阶之尾递归的用法实例
2018/01/31 Python
对python 合并 累加两个dict的实例详解
2019/01/21 Python
在python中,使用scatter绘制散点图的实例
2019/07/03 Python
Django接收post前端返回的json格式数据代码实现
2019/07/31 Python
Django+zTree构建组织架构树的方法
2019/08/21 Python
pytorch方法测试——激活函数(ReLU)详解
2020/01/15 Python
解决安装新版PyQt5、PyQT5-tool后打不开并Designer.exe提示no Qt platform plugin的问题
2020/04/24 Python
Python偏函数实现原理及应用
2020/11/20 Python
我的applet原先好好的, 一放到web server就会有问题,为什么?
2016/05/10 面试题
药学专业大学生个人的自我评价
2013/11/04 职场文书
伊琍体标语
2014/06/25 职场文书
个人作风建设总结
2014/10/23 职场文书
2015年社区卫生工作总结
2015/04/21 职场文书
HTML5 新增内容和 API详解
2021/11/17 HTML / CSS
我们认为中短波广播场强仪的最佳组合
2022/04/05 无线电
JS前端使用canvas实现扩展物体类和事件派发
2022/08/05 Javascript