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 全局AJAX事件使用代码
Nov 05 Javascript
当鼠标移动时出现特效的JQuery代码
Nov 08 Javascript
利用js判断浏览器类型(是否为IE,Firefox,Opera浏览器)
Nov 22 Javascript
javascript实现左右控制无缝滚动
Dec 31 Javascript
jQuery实现菜单式图片滑动切换
Mar 14 Javascript
ES6中如何使用Set和WeakSet
Mar 10 Javascript
js创建数组的简单方法
Jul 27 Javascript
AngularJS使用ng-class动态增减class样式的方法示例
May 18 Javascript
JavaScript中使用Async实现异步控制
Aug 15 Javascript
微信小程序 MinUI组件库系列之badge徽章组件示例
Aug 20 Javascript
基于vue-cli3+typescript的tsx开发模板搭建过程分享
Feb 28 Javascript
antd vue table跨行合并单元格,并且自定义内容实例
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
谈谈新手如何学习PHP
2006/12/14 PHP
php检测网页是否被百度收录的函数代码
2013/10/09 PHP
php中通过DirectoryIterator删除整个目录的方法
2015/03/13 PHP
Symfony2开发之控制器用法实例分析
2016/02/05 PHP
使用ThinkPHP生成缩略图及显示
2017/04/27 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
2017/11/14 PHP
PHP中localeconv()函数的用法
2019/03/26 PHP
jQuery添加/改变/移除CSS类及判断是否已经存在CSS
2014/08/20 Javascript
require.js深入了解 require.js特性介绍
2014/09/04 Javascript
使用jQuery+EasyUI实现CheckBoxTree的级联选中特效
2015/12/06 Javascript
bootstrap的3级菜单样式,支持母版页保留打开状态实现方法
2016/11/10 Javascript
js实现按座位号抽奖
2017/04/05 Javascript
如何将 jQuery 从你的 Bootstrap 项目中移除(取而代之使用Vue.js)
2017/07/17 jQuery
JavaScript 中的 this 简单规则
2017/09/19 Javascript
jQuery常见的遍历DOM操作详解
2018/09/05 jQuery
vue车牌号校验和银行校验实战
2019/01/23 Javascript
Vue路由守卫之路由独享守卫
2019/09/25 Javascript
js实现全选和全不选
2020/07/28 Javascript
js将日期格式转换为YYYY-MM-DD HH:MM:SS
2020/09/18 Javascript
React 条件渲染最佳实践小结(7种)
2020/09/27 Javascript
为什么你还不懂得怎么使用Python协程
2019/05/13 Python
PyQt5 实现字体大小自适应分辨率的方法
2019/06/18 Python
在windows下使用python进行串口通讯的方法
2019/07/02 Python
Django中信号signals的简单使用方法
2019/07/04 Python
Python+opencv+pyaudio实现带声音屏幕录制
2019/12/23 Python
python判断是空的实例分享
2020/07/06 Python
python 解决Windows平台上路径有空格的问题
2020/11/10 Python
AmazeUi Tree(树形结构) 应用小结
2020/08/17 HTML / CSS
独特的礼品和创新的科技产品:The Grommet
2018/02/24 全球购物
Servlet方面面试题
2016/09/28 面试题
机械工程系毕业生求职信
2013/09/27 职场文书
会计找工作求职信范文
2013/12/09 职场文书
2014年最新个人对照检查材料范文
2014/09/25 职场文书
运动会广播稿200字
2014/10/18 职场文书
公务员政审个人总结
2015/02/12 职场文书
Linux中sftp常用命令整理
2022/06/28 Servers