小发现之浅谈location.search与location.hash的问题


Posted in Javascript onJune 23, 2017

背景

用过Vue Router的童鞋应该对路由传参的方式多多少少有些印象,Vue Router支持两种传参方式:query与params;其中query方式就是动态地在路由url后面追加参数,就是http的get请求方式;那Vue Router与location的search和hash有什么关系呢?

正题

首先我们先来看一下query方式传参

路由A

// 跳转到detail路由页
let query = {
   name: abc,
   age: 23     
}
this.$router.push({name: 'detail', query: query})

路由detail

created(){
  // 打印query参数
  alert(JSON.stringify(this.$route.query))    
 }

运行截图

小发现之浅谈location.search与location.hash的问题

一切好像都没有问题,但是由于我好奇心比较强,所有就稍微手贱了一下下,把地址栏中链接的detail和query交换了一下位置,于是就出现了下面的情况,见截图

小发现之浅谈location.search与location.hash的问题

感觉可能是Vue Router的问题(人家Router已经自动把query加在hash后面了,你非要交换位置,似不似傻),在日常使用Vue Router时只要我们的url不是手动把query和hash交换位置,就不会出现问题;这里真正要说的是,在传统模式开发中,如果在url中search与hash同事存在,并且你要用到这些query时,你的hash值一定要放在query后面,下面我们以百度页面演示一下

情况一:query在hash前面

小发现之浅谈location.search与location.hash的问题

情况二:query在hash后面

小发现之浅谈location.search与location.hash的问题

结果证明,当query在hash后面时,连内置对象location自身都取不到query,难道你有什么好的办法吗,所有我们要避免情况二

常用取url参数的方法(网上搜的)

1.正则方式

function GetQueryString(name)
{
   var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
   var r = window.location.search.substr(1).match(reg);
   if(r!=null)return unescape(r[2]); return null;
}
 
// 调用方法
alert(GetQueryString("参数名1"));
alert(GetQueryString("参数名2"));
alert(GetQueryString("参数名3"));

2.字符串方式

function GetRequest() { 
 var url = location.search; //获取url中"?"符后的字串 
 var theRequest = new Object(); 
 if (url.indexOf("?") != -1) { 
  var str = url.substr(1); 
  strs = str.split("&"); 
  for(var i = 0; i < strs.length; i ++) { 
   theRequest[strs[i].split("=")[0]]=unescape(strs[i].split("=")[1]); 
  } 
 } 
 return theRequest; 
}

// 调用方式
var urlParams = GetRequest();
urlParams["参数名称"]

结语

一个小小的发现,希望大家看完看完会有所印象,以后出现类似问题时,就知道是什么原因,该如何解决

以上这篇小发现之浅谈location.search与location.hash的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
通过javascript的匿名函数来分析几段简单有趣的代码
Jun 29 Javascript
js数组Array sort方法使用深入分析
Feb 21 Javascript
与Math.pow 相反的函数使用介绍
Aug 04 Javascript
jquery实现在页面加载的时自动为日期插件添加当前日期
Aug 20 Javascript
node.js实现BigPipe详解
Dec 05 Javascript
JavaScript对象参数的引用传递
Jan 14 Javascript
Jquery组件easyUi实现手风琴(折叠面板)示例
Aug 23 Javascript
JavaScript ES6中CLASS的使用详解
Nov 22 Javascript
Bootstrap基本样式学习笔记之图片(6)
Dec 07 Javascript
js自定义QQ菜单效果
Jan 10 Javascript
jQuery实现的简单图片轮播效果完整示例
Feb 08 jQuery
详解小程序缓存插件(mrc)
Aug 17 Javascript
微信JS SDK接入的几点注意事项(必看篇)
Jun 23 #Javascript
简单谈谈require模块化jquery和angular的问题
Jun 23 #jQuery
详解vuejs之v-for列表渲染
Jun 22 #Javascript
vue.js实现条件渲染的实例代码
Jun 22 #Javascript
vue.js 上传图片实例代码
Jun 22 #Javascript
详解Angular 开发环境搭建
Jun 22 #Javascript
详解Angular2组件之间如何通信
Jun 22 #Javascript
You might like
PHP代码网站如何防范SQL注入漏洞攻击建议分享
2012/03/01 PHP
Thinkphp模板标签if和eq的区别和比较实例分析
2015/07/01 PHP
php实现的中秋博饼游戏之绘制骰子图案功能示例
2017/11/06 PHP
如何在PHP中使用AES加密算法加密数据
2020/06/24 PHP
一份老外写的XMLHttpRequest代码多浏览器支持兼容性
2007/01/11 Javascript
Prototype ObjectRange对象学习
2009/07/19 Javascript
jquery中获取元素的几种方式小结
2011/07/05 Javascript
A标签中通过href和onclick传递的this对象实现思路
2013/04/19 Javascript
jquery showModelDialog的使用方法示例详解
2013/11/19 Javascript
同域jQuery(跨)iframe操作DOM(示例代码)
2013/12/13 Javascript
JavaScript事件委托技术实例分析
2015/02/06 Javascript
JS+CSS实现仿新浪微博搜索框的方法
2015/02/24 Javascript
利用jQuery和CSS将背景图片拉伸
2015/10/16 Javascript
基于javascript实现样式清新图片轮播特效
2016/03/30 Javascript
JavaScript中的prototype原型学习指南
2016/05/09 Javascript
jquery实现全选、不选、反选的两种方法
2016/09/06 Javascript
微信小程序 form组件详解
2016/10/25 Javascript
原生JS轮播图插件
2017/02/09 Javascript
BetterScroll 在移动端滚动场景的应用
2017/09/18 Javascript
Vue下拉框回显并默认选中随机问题
2018/09/06 Javascript
vue项目使用微信公众号支付总结及遇到的坑
2018/10/23 Javascript
vue踩坑记-在项目中安装依赖模块npm install报错
2019/04/02 Javascript
js实现简单分页导航栏效果
2019/06/28 Javascript
[02:01]大师之路——DOTA2完美大师赛11月论剑上海
2017/11/06 DOTA
python删除列表中重复记录的方法
2015/04/28 Python
用Python程序抓取网页的HTML信息的一个小实例
2015/05/02 Python
Python读入mnist二进制图像文件并显示实例
2020/04/24 Python
Pytorch1.5.1版本安装的方法步骤
2020/12/31 Python
recorder.js 基于Html5录音功能的实现
2020/05/26 HTML / CSS
萨克斯第五大道英国:Saks Fifth Avenue英国
2019/04/01 全球购物
LORAC官网:美国彩妆品牌
2019/08/27 全球购物
会计与审计专业大专生求职信
2013/10/03 职场文书
生日派对邀请函
2014/01/13 职场文书
会计专业自荐信范文
2019/05/22 职场文书
8个JS的reduce使用实例和reduce操作方式
2021/10/05 Javascript
5个实用的JavaScript新特性
2022/06/16 Javascript