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 相关文章推荐
jQuery 表单验证扩展(三)
Oct 20 Javascript
JQuery 应用 JQuery.groupTable.js
Dec 15 Javascript
js实现右键自定义菜单
Dec 03 Javascript
js的三种继承方式详解
Jan 21 Javascript
js实现颜色阶梯渐变效果(Gradient算法)
Mar 21 Javascript
vuex实现登录状态的存储,未登录状态不允许浏览的方法
Mar 09 Javascript
使用JavaScript中的lodash编写双色球效果
Jun 24 Javascript
Vue强制组件重新渲染的方法讨论
Feb 03 Javascript
Vue 基于 vuedraggable 实现选中、拖拽、排序效果
May 18 Javascript
使用JavaScript通过前端发送电子邮件
May 22 Javascript
vue-iview动态新增和删除的方法
Jun 17 Javascript
vue导入.md文件的步骤(markdown转HTML)
Dec 31 Vue.js
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
dedecms 批量提取第一张图片最为缩略图的代码(文章+软件)
2009/10/29 PHP
php中serialize序列化与json性能测试的示例分析
2013/04/27 PHP
解析将多维数组转换为支持curl提交的一维数组格式
2013/07/08 PHP
php构造函数的继承方法
2015/02/09 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
2017/11/12 PHP
基于php伪静态的实现方法解析
2020/07/31 PHP
鼠标滑上去后图片放大浮出效果的js代码
2011/05/28 Javascript
JQuery select控件的相关操作实现代码
2012/09/14 Javascript
jQuery使用数组编写图片无缝向左滚动
2012/12/11 Javascript
JS 精确统计网站访问量的实例代码
2013/07/05 Javascript
javascript完美拖拽的实现方法
2013/09/29 Javascript
js中传递特殊字符(+,&)的方法
2014/01/16 Javascript
js拼接html注意问题示例探讨
2014/07/14 Javascript
浅谈JSON和JSONP区别及jQuery的ajax jsonp的使用
2014/11/23 Javascript
如何在JS中实现相互转换XML和JSON
2016/07/19 Javascript
完美解决jQuery 鼠标快速滑过后,会执行多次滑出的问题
2016/12/08 Javascript
Vue-router的使用和出现空白页,路由对象属性详解
2018/09/03 Javascript
vue form check 表单验证的实现代码
2018/12/09 Javascript
vue使用混入定义全局变量、函数、筛选器的实例代码
2019/07/29 Javascript
JavaScript 中判断变量是否为数字的示例代码
2020/10/22 Javascript
python基础教程之元组操作使用详解
2014/03/25 Python
python使用socket进行简单网络连接的方法
2015/04/29 Python
python抓取最新博客内容并生成Rss
2015/05/17 Python
python psutil库安装教程
2018/03/19 Python
python bmp转换为jpg 并删除原图的方法
2018/10/25 Python
Python从列表推导到zip()函数的5种技巧总结
2019/10/23 Python
Pytorch中index_select() 函数的实现理解
2019/11/19 Python
Pamela Love官网:纽约设计师Pamela Love的精美、时尚和穿孔珠宝
2020/10/19 全球购物
成都思必达公司C#程序员招聘面试题
2013/06/26 面试题
化工工艺专业求职信
2013/09/22 职场文书
室内设计专业学生的自我评价分享
2013/11/27 职场文书
优秀员工个人的自我评价
2013/11/29 职场文书
庆七一活动总结
2014/08/27 职场文书
物业工程部经理岗位职责
2015/04/09 职场文书
2019已经过半,你知道年中工作总结该怎么写吗?
2019/07/03 职场文书
纯CSS实现一个简单步骤条的示例代码
2022/07/15 HTML / CSS