小发现之浅谈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 相关文章推荐
根据分辩率调用不同的CSS.
Jan 08 Javascript
在JavaScript中遭遇级联表达式陷阱
Mar 08 Javascript
ajax 同步请求和异步请求的差异分析
Jul 04 Javascript
jquery限定文本框只能输入数字即整数和小数
Nov 29 Javascript
jQuery中ajax和post处理json的不同示例对比
Nov 02 Javascript
jquery实现拖拽调整Div大小
Jan 30 Javascript
Bootstrap轮播图学习使用
Feb 10 Javascript
jQuery插件zTree实现的基本树与节点获取操作示例
Mar 08 Javascript
使用jQuery实现一个类似GridView的编辑,更新,取消和删除的功能
Mar 15 Javascript
Vue.js 中的 v-model 指令及绑定表单元素的方法
Dec 03 Javascript
vue+element加入签名效果(移动端可用)
Jun 17 Javascript
vue-router定义元信息meta操作
Dec 07 Vue.js
微信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 stripos()函数及注意事项的分析
2013/06/08 PHP
php模拟post上传图片实现代码
2016/06/24 PHP
PHP入门教程之字符串处理技巧总结(转换,过滤,解析,查找,截取,替换等)
2016/09/11 PHP
PHP实现的pdo连接数据库并插入数据功能简单示例
2019/03/30 PHP
Javascript 实用小技巧
2010/04/07 Javascript
使用Firebug对js进行断点调试的图文方法
2011/04/02 Javascript
jQuery.each()用法分享
2012/07/31 Javascript
jquery中的过滤操作详细解析
2013/12/02 Javascript
js中创建对象的几种方式示例介绍
2014/01/26 Javascript
JavaScript使用HTML5的window.postMessage实现跨域通信例子
2014/04/11 Javascript
Javascript学习笔记之 对象篇(三) : hasOwnProperty
2014/06/24 Javascript
js中键盘事件实例简析
2015/01/10 Javascript
BootStrap下拉菜单和滚动监听插件实现代码
2016/09/26 Javascript
js实现文字无缝向上滚动
2017/02/16 Javascript
webpack+vue+express(hot)热启动调试简单配置方法
2018/09/19 Javascript
JS如何实现动态添加的元素绑定事件
2019/11/12 Javascript
javascript数组元素删除方法delete和splice解析
2019/12/09 Javascript
怎么理解wx.navigateTo的events参数使用详情
2020/05/18 Javascript
javascript实现支付宝滑块验证码效果
2020/07/24 Javascript
Python实现的概率分布运算操作示例
2017/08/14 Python
django 多数据库配置教程
2018/05/30 Python
python实现批量修改图片格式和尺寸
2018/06/07 Python
python是否适合网页编程详解
2019/10/04 Python
基于python实现上传文件到OSS代码实例
2020/05/09 Python
python爬虫scrapy基本使用超详细教程
2021/02/20 Python
详解h5页面在不同ios设备上的问题总结
2019/03/01 HTML / CSS
Sandro Paris美国官网:典雅别致的法国时尚服饰品牌
2017/12/26 全球购物
具有防紫外线功能的高性能钓鱼服装:Hook&Tackle
2018/08/16 全球购物
对祖国的寄语大全
2014/04/11 职场文书
预备党员思想汇报1000字
2014/10/07 职场文书
英语复习计划
2015/01/19 职场文书
储备店长岗位职责
2015/04/14 职场文书
中学生打架检讨书之500字
2019/08/06 职场文书
导游词之湖州-太湖
2019/10/11 职场文书
导游词之新疆尼雅遗址
2019/10/16 职场文书
postgresql中如何执行sql文件
2023/05/08 PostgreSQL