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入门知识简介
Mar 04 Javascript
js 时间格式与时间戳的相互转换示例代码
Dec 25 Javascript
jquery中each遍历对象和数组示例
Aug 05 Javascript
js动态修改表格行colspan列跨度的方法
Mar 30 Javascript
JavaScript对Json的增删改属性详解
Jun 02 Javascript
BootStrap Validator使用注意事项(必看篇)
Sep 28 Javascript
Json对象和字符串互相转换json数据拼接和JSON使用方式详细介绍(小结)
Oct 25 Javascript
通俗易懂地解释JS中的闭包
Oct 23 Javascript
利用ECharts.js画K线图的方法示例
Jan 10 Javascript
vue+Element实现搜索关键字高亮功能
May 28 Javascript
JQuery表单元素取值赋值方法总结
May 12 jQuery
vue中data里面的数据相互使用方式
Jun 05 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
PHP静态新闻列表自动生成代码
2007/06/14 PHP
PHP 模拟登陆MSN并获得用户信息
2009/05/16 PHP
使用php检测用户当前使用的浏览器是否为IE浏览器
2013/12/03 PHP
PHP提交表单失败后如何保留已经填写的信息
2014/06/20 PHP
php使用PDO方法详解
2014/12/27 PHP
自制PHP框架之设计模式
2017/05/07 PHP
php中输出json对象的值(实现方法)
2018/03/07 PHP
Javascript之文件操作
2007/03/07 Javascript
jquery中的 $("#jb51")与document.getElementById("jb51") 的区别
2011/07/26 Javascript
如何让div span等元素能响应键盘事件操作指南
2012/11/13 Javascript
JavaScript动态添加列的方法
2015/03/25 Javascript
JS实现超简洁网页title标题跑动闪烁提示效果代码
2015/10/23 Javascript
Angular使用$http.jsonp发送跨站请求的方法
2017/03/16 Javascript
详细AngularJs4的图片剪裁组件的实例
2017/07/12 Javascript
vue中的计算属性的使用和vue实例的方法示例
2017/12/04 Javascript
解决v-for中使用v-if或者v-bind:class失效的问题
2018/09/25 Javascript
JS学习笔记之闭包小案例分析
2019/05/29 Javascript
vue-cli基础配置及webpack配置修改的完整步骤
2019/10/20 Javascript
JS实现音乐导航特效
2020/01/06 Javascript
python类定义的讲解
2013/11/01 Python
用Python中的__slots__缓存资源以节省内存开销的方法
2015/04/02 Python
Python2.x版本中maketrans()方法的使用介绍
2015/05/19 Python
Python中enumerate()函数编写更Pythonic的循环
2018/03/06 Python
python中的内置函数max()和min()及mas()函数的高级用法
2018/03/29 Python
Python中变量的输入输出实例代码详解
2019/07/28 Python
Python Django 前后端分离 API的方法
2019/08/28 Python
Python list和str互转的实现示例
2020/11/16 Python
css3 条纹化和透明化表格Firefox下测试成功
2014/04/15 HTML / CSS
css3 图片圆形显示 如何CSS将正方形图片显示为圆形图片布局
2014/10/10 HTML / CSS
使用CSS3实现一个3D相册效果实例
2016/12/03 HTML / CSS
CLR与IL分别是什么含义
2016/08/23 面试题
店长岗位的工作内容
2013/11/12 职场文书
调解员先进事迹材料
2014/02/07 职场文书
小学一年级评语大全
2014/04/22 职场文书
建筑投标担保书
2014/05/20 职场文书
简单且有用的Python数据分析和机器学习代码
2021/07/02 Python