小发现之浅谈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 22 Javascript
JQuery获取各种宽度、高度(format函数)实例
Mar 04 Javascript
JS两种定义方式的区别、内部原理
Nov 21 Javascript
Javascript前端UI框架Kit使用指南之Kitjs简介
Nov 28 Javascript
JavaScript中的alert()函数使用技巧详解
Dec 29 Javascript
javascript动态设置样式style实例分析
May 13 Javascript
node.js连接mongoDB数据库 快速搭建自己的web服务
Apr 17 Javascript
javascript断点调试心得分享
Apr 23 Javascript
在js里怎么实现Xcode里的callFuncN方法(详解)
Nov 05 Javascript
JS控制div跳转到指定的位置的几种解决方案总结
Nov 05 Javascript
js仿京东轮播效果 选项卡套选项卡使用
Jan 12 Javascript
Angular8基础应用之表单及其验证
Aug 11 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
PHILIPS L4X25T电路分析和打理
2021/03/02 无线电
用PHP和ACCESS写聊天室(二)
2006/10/09 PHP
PHP中的gzcompress、gzdeflate、gzencode函数详解
2014/07/29 PHP
php实现递归抓取网页类实例
2015/04/03 PHP
php生成二维码不保存服务器还有下载功能的实现代码
2018/08/09 PHP
Javascript优化技巧(文件瘦身篇)
2008/01/28 Javascript
js分解url参数(面向对象-极简主义法应用)
2012/08/09 Javascript
JQuery在页面中添加和除移DOM示例代码
2013/06/24 Javascript
jquery实现弹出层完美居中效果
2014/03/03 Javascript
thinkphp中常用的系统常量和系统变量
2014/03/05 Javascript
JavaScript也谈内存优化
2014/06/06 Javascript
Node.js的特点和应用场景介绍
2014/11/04 Javascript
JavaScript使用Replace进行字符串替换的方法
2015/04/14 Javascript
jQuery+AJAX实现遮罩层登录验证界面(附源码)
2020/09/13 Javascript
Javascript实现单例模式
2016/01/24 Javascript
JS实现简单的二维矩阵乘积运算
2016/01/26 Javascript
jQuery中的ready函数与window.onload谁先执行
2016/06/21 Javascript
JS定时器用法分析【时钟与菜单中的应用】
2016/12/21 Javascript
JS跨域请求外部服务器的资源
2017/02/06 Javascript
使用JS动态显示文本
2017/09/09 Javascript
浅谈微信JS-SDK 微信分享接口开发(介绍版)
2018/08/15 Javascript
layerui代码控制tab选项卡,添加,关闭的实例
2019/09/04 Javascript
谈谈JavaScript中的函数
2020/09/08 Javascript
[01:50:49]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第三场 1月24日
2021/03/11 DOTA
python实现在windows服务中新建进程的方法
2015/06/30 Python
在Lighttpd服务器中运行Django应用的方法
2015/07/22 Python
django文档学习之applications使用详解
2018/01/29 Python
python对日志进行处理的实例代码
2018/10/06 Python
Python cookie的保存与读取、SSL讲解
2020/02/17 Python
PyQt5事件处理之定时在控件上显示信息的代码
2020/03/25 Python
Python Selenium库的基本使用教程
2021/01/04 Python
捷克厨房用品购物网站:Tescoma
2018/07/13 全球购物
租赁意向书范本
2014/04/01 职场文书
保护野生动物倡议书
2014/05/16 职场文书
小学生我的梦想演讲稿
2014/08/21 职场文书
详解MySql中InnoDB存储引擎中的各种锁
2022/02/12 MySQL