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 相关文章推荐
验证用户是否修改过页面的数据的实现方法
Sep 26 Javascript
js原型链原理看图说明
Jul 07 Javascript
基于jQuery实现左右图片轮播(原理通用)
Dec 24 Javascript
简单实现js选项卡切换效果
Feb 03 Javascript
jQuery事件的绑定、触发、及监听方法简单说明
May 10 Javascript
使用JavaScript实现弹出层效果的简单实例
May 31 Javascript
jquery,js简单实现类似Angular.js双向绑定
Jan 13 Javascript
js实现一键复制功能
Mar 16 Javascript
jQuery插件Echarts实现的渐变色柱状图
Mar 23 jQuery
leaflet加载geojson叠加显示功能代码
Feb 21 Javascript
基于aotu.js实现微信自动添加通讯录中的联系人功能
May 28 Javascript
解决ant design vue 表格a-table二次封装,slots渲染的问题
Oct 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
PHPMYADMIN导入数据最大为2M的解决方法
2012/04/23 PHP
PHP中的按位与和按位或操作示例
2014/01/27 PHP
zf框架的session会话周期及次数限制使用示例
2014/03/13 PHP
在CentOS系统上从零开始搭建WordPress博客的全流程记录
2016/04/21 PHP
PHP数组生成XML格式数据的封装类实例
2016/11/10 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
浅谈PHP SHA1withRSA加密生成签名及验签
2019/03/18 PHP
Laravel框架实现文件上传的方法分析
2019/09/29 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
2020/02/27 PHP
Yii框架组件的事件机制原理与用法分析
2020/04/07 PHP
客户端脚本中常常出现的一些问题和调试技巧
2007/01/09 Javascript
jQuery数组处理代码详解(含实例演示)
2012/02/03 Javascript
window.location不跳转的问题解决方法
2014/04/17 Javascript
javascript实例--教你实现扑克牌洗牌功能
2014/05/15 Javascript
js实现页面跳转的五种方法推荐
2016/03/10 Javascript
vue2.0 资源文件assets和static的区别详解
2018/04/08 Javascript
超出JavaScript安全整数限制的数字计算BigInt详解
2018/06/24 Javascript
React 使用recharts实现散点地图的示例代码
2018/12/07 Javascript
解决layui的table插件无法多层级获取json数据的问题
2019/09/19 Javascript
[00:33]2016完美“圣”典风云人物:Sccc宣传片
2016/12/03 DOTA
python生成器的使用方法
2013/11/21 Python
Python自动化测试工具Splinter简介和使用实例
2014/05/13 Python
判断网页编码的方法python版
2016/08/12 Python
python读取二进制mnist实例详解
2017/05/31 Python
用tensorflow构建线性回归模型的示例代码
2018/03/05 Python
解决Python一行输出不显示的问题
2018/12/03 Python
css3实现超立体3D图片侧翻倾斜效果
2014/04/16 HTML / CSS
为什么要优先使用同步代码块而不是同步方法?
2013/01/30 面试题
Python里面如何实现tuple和list的转换
2012/06/13 面试题
初中地理教学反思
2014/01/11 职场文书
我的求职择业计划书
2014/04/04 职场文书
青春寄语大全
2014/04/09 职场文书
信息管理专业自荐书
2014/06/05 职场文书
法人授权委托书样本
2014/09/19 职场文书
小学班级口号大全
2015/12/25 职场文书
2019幼儿园感恩节活动策划书
2019/11/28 职场文书