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 相关文章推荐
传智播客学习之java 反射
Nov 22 Javascript
javascript 伪数组实现方法
Oct 11 Javascript
jQuery+CSS 半开折叠效果原理及代码(自写)
Mar 04 Javascript
Javascript中判断对象是否为空
Jun 10 Javascript
JS onkeypress兼容性写法详解
Apr 27 Javascript
JavaScript 继承详解(五)
Oct 11 Javascript
js数字舍入误差以及解决方法(必看篇)
Feb 28 Javascript
基于JavaScript实现新增内容滚动播放效果附完整代码
Aug 24 Javascript
教你用Cordova打包Vue项目的方法
Oct 17 Javascript
JS实现的透明度渐变动画效果示例
Apr 28 Javascript
Vue按时间段查询数据组件使用详解
Aug 21 Javascript
vue实现两个组件之间数据共享和修改操作
Nov 12 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实现定时生成HTML网站首页实例代码
2008/11/20 PHP
PHP 翻页 实例代码
2009/08/07 PHP
探讨各种PHP字符串函数的总结分析
2013/06/05 PHP
探讨PHP使用eAccelerator的API开发详解
2013/06/09 PHP
从性能方面考虑PHP下载远程文件的3种方法
2015/12/29 PHP
PHP使用反射机制实现查找类和方法的所在位置
2016/04/22 PHP
php 删除一维数组中某一个值元素的操作方法
2018/02/01 PHP
php进程daemon化的正确实现方法
2018/09/06 PHP
Laravel Eloquent ORM 实现查询表中指定的字段
2019/10/17 PHP
使用闭包对setTimeout进行简单封装避免出错
2013/07/10 Javascript
javascript中eval和with用法实例总结
2015/11/30 Javascript
jQuery实现打开页面渐现效果示例
2016/07/27 Javascript
解决OneThink中无法异步提交kindeditor文本框中修改后的内容方法
2017/05/05 Javascript
Angular 2父子组件数据传递之@Input和@Output详解(下)
2017/07/05 Javascript
js自定义弹框插件的封装
2020/08/24 Javascript
深入理解Angular4订阅(Subscribe)与取消
2017/11/22 Javascript
解决vue 路由变化页面数据不刷新的问题
2018/03/13 Javascript
vue脚手架搭建过程图解
2018/06/06 Javascript
微信小程序利用Canvas绘制图片和竖排文字详解
2019/06/25 Javascript
详解js中的原型,原型对象,原型链
2020/07/16 Javascript
vue中重定向redirect:‘/index‘,不显示问题、跳转出错的完美解决
2020/09/28 Javascript
JavaScript如何实现防止重复的网络请求的示例
2021/01/28 Javascript
vue3.0中使用element的完整步骤
2021/03/04 Vue.js
python中Flask框架简单入门实例
2015/03/21 Python
Python输出各行命令详解
2018/02/01 Python
python实现音乐下载的统计
2018/06/20 Python
keras中的History对象用法
2020/06/19 Python
英国独特的时尚和生活方式品牌:JOY
2018/03/17 全球购物
中科创达面试题
2016/12/28 面试题
社会实践自我鉴定
2013/11/07 职场文书
应用化学专业职业生涯规划书
2014/01/22 职场文书
学习决心书范文
2014/03/11 职场文书
5.12护士节演讲稿
2014/04/30 职场文书
中国梦演讲稿5分钟
2014/08/19 职场文书
高考诚信考试承诺书
2015/04/29 职场文书
DQL数据查询语句使用示例
2022/12/24 MySQL