小发现之浅谈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 相关文章推荐
禁止js文件缓存的代码
Apr 09 Javascript
js购物车实现思路及代码(个人感觉不错)
Dec 23 Javascript
javaScript 页面自动加载事件详解
Feb 10 Javascript
js完美实现@提到好友特效(兼容各大浏览器)
Mar 16 Javascript
JS DOM实现鼠标滑动图片效果
Sep 17 Javascript
vue中实现移动端的scroll滚动方法
Mar 03 Javascript
Angular4集成ng2-file-upload的上传组件
Mar 14 Javascript
jQuery md5加密插件jQuery.md5.js用法示例
Aug 24 jQuery
js实现随机抽奖
Mar 19 Javascript
解决vue的touchStart事件及click事件冲突问题
Jul 21 Javascript
Element Badge标记的使用方法
Jul 27 Javascript
解决Vue使用bus总线时,第一次路由跳转时数据没成功传递问题
Jul 28 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
全国FM电台频率大全 - 26 西藏自治区
2020/03/11 无线电
人尽可用的Windows技巧小贴士之下篇
2007/03/22 PHP
献给php初学者(入门学习经验谈)
2010/10/12 PHP
PHP各种异常和错误的拦截方法及发生致命错误时进行报警
2016/01/19 PHP
thinkphp3.2.0 setInc方法 源码全面解析
2018/01/29 PHP
CI框架教程之优化验证码机制详解【验证码辅助函数】
2019/04/16 PHP
PHP设计模式(九)外观模式Facade实例详解【结构型】
2020/05/02 PHP
Javascript模板技术
2007/04/27 Javascript
表格 隔行换色升级版
2009/11/07 Javascript
jquery multiSelect 多选下拉框
2010/07/09 Javascript
node.js中的http.response.getHeader方法使用说明
2014/12/14 Javascript
javascript面向对象之对象的深入理解
2015/01/13 Javascript
jQuery增加、删除及修改select option的方法
2016/08/19 Javascript
js通过classname来获取元素的方法
2016/11/24 Javascript
详解React Native网络请求fetch简单封装
2017/08/10 Javascript
动态统计当前输入内容的字节、字符数的实例详解
2017/10/27 Javascript
vue.js实现标签页切换效果
2018/06/07 Javascript
spring+angular实现导出excel的实现代码
2019/02/27 Javascript
JavaScript this在函数中的指向及实例详解
2019/10/14 Javascript
简述Vue中容易被忽视的知识点
2019/12/09 Javascript
微信小程序scroll-view实现滚动到锚点左侧导航栏点餐功能(点击种类,滚动到锚点)
2020/06/11 Javascript
详解vue中v-on事件监听指令的基本用法
2020/07/22 Javascript
分享15个最受欢迎的Python开源框架
2014/07/13 Python
pycharm下打开、执行并调试scrapy爬虫程序的方法
2017/11/29 Python
python批量替换多文件字符串问题详解
2018/04/22 Python
对python-3-print重定向输出的几种方法总结
2018/05/11 Python
Python pexpect模块及shell脚本except原理解析
2020/08/03 Python
python基于socket模拟实现ssh远程执行命令
2020/12/05 Python
html5 css3实例教程 一款html5和css3实现的小机器人走路动画
2014/10/20 HTML / CSS
wedgwood加拿大官网:1759年成立的英国国宝级陶瓷餐具品牌
2018/07/17 全球购物
美国最大的烧烤架和户外生活用品专业零售商:Barbeques Galore
2021/01/09 全球购物
介绍一下Linux内核的排队自旋锁
2014/08/27 面试题
创先争优承诺书范文
2014/03/31 职场文书
学校教师读书活动总结
2014/07/08 职场文书
民政工作个人总结
2015/02/28 职场文书
vue+springboot实现登录验证码
2021/05/27 Vue.js