地址栏传参

// 地址栏传参
function getLocation() {
  // 获取地址栏参数
  var str = location.search;
  // var  str = "?name='zs'&age=18&sex='man'";
  // 解码
  str = decodeURI(str);
  // 切割去除?[slice切割字符串]
  str = str.slice(1);
  // 将字符串分割为数组【split()】
  var arr = str.split("&");
  var obj = {};
  // 遍历数组获取键值
  arr.forEach(function(v, i) {
    var key = v.split("=")[0];
    var value = v.split("=")[1];
    obj[key] = value;
  });
  return obj;
}
console.log(getLocation());

function getLocation(k) {
  // 获取地址栏参数
  var str = location.search;
  // 解码
  str = decodeURI(str);
  // 切割去除?[slice切割字符串]
  str = str.slice(1);
  // 将字符串分割为数组【split()】
  var arr = str.split("&");
  var obj = {};
  // 遍历数组获取键值
  arr.forEach(function(v, i) {
    var key = v.split("=")[0];
    var value = v.split("=")[1];
    obj[key] = value;
  });
  return obj[k];
}
console.log(getLocation("name"));

// 将url的查询参数解析成字典对象
// 因为url允许用户随意输入,如果用拆字符的方式,有任何一处没有考虑到容错,就会导致整个js都报错。而正则就没有这个问题,他只匹配出正确的配对,非法的全部过滤掉,简单,方便。

function getQueryObject(url) {
  url = url == null ? window.location.href : url;
  // substring(start,end)截取字符串,取不到end,所以+1
  var search = url.substring(url.indexOf("?") + 1);
  // console.log(typeof(search));
  // console.log(search);
  var obj = {};
  // 前后的斜杠/是正则表达式的分隔符,最后的g表示全局匹配,匹配到第一个之后不会停下来,会继续匹配,
  // ():标记一个子表达式的开始与结束位置
  // [:标记一个中括号表达式的开始。要匹配 [,请使用 \[。
  // [^]表示字符类取反,比如[^abc]匹配的就是不是a和b和c的单个字符,[^?&=]匹配不是^和?和=的单个字符.
  // 字符类[]后面的+和*表示量词:
  // + 等价于 {1,} 重复1次或多次
  // * 等价于 {0,} 重复0次或多次
  var reg = /([^?&=]+)=([^?&=]*)/g;

  // 替换:replace(需要替换,替换值)
  /*第二个参数可传入函数,会对每个匹配到的字符串'rs'做一次处理,然后你可以将结果return 出来*/
  search.replace(reg, function(rs, $1, $2) {
    console.log($1);
    console.log($2);

    // 解码转为中文
    // decodeURIComponent() 函数可对 encodeURIComponent() 函数编码的 URI 进行解码。
    var name = decodeURIComponent($1);
    var val = decodeURIComponent($2);
    // String(s);
    // 参数 s 是要存储在 String 对象中或转换成原始字符串的值。
    // console.log(name);
    // console.log(val);
    val = String(val);
    obj[name] = val;
    console.log(rs);

    // obj[decodeURIComponent($1)]=decodeURIComponent($2)
    return rs;
  });
  return obj;
}

console.log(getQueryObject());
// "http://www.cnblogs.com/leee/p/4456840.html?name=ls&age=28&sex=man"
// Object {name: "1", dd: "ddd**"}

//   正则解析;
var reg = /([^?&=]+)=([^?&=]*)/g;

var str = "foo=bar&lang=js";
var reg = /[^?&=]{1,}=[^?&=]{0,}/;
console.log(str.match(reg)); //输出 ["foo=bar"]

var str = "foo=bar&lang=js";
var reg = /[^?&=]{1,}=[^?&=]{0,}/g;
console.log(str.match(reg)); //输出 ["foo=bar", "lang=js"]

var str = "foo=bar&lang=js";
var reg = /([^?&=]{1,})=([^?&=]{0,})/;
console.log(str.match(reg)); //输出 ["foo=bar", "foo", "bar"]

转载于:https://www.cnblogs.com/bug-jin/p/10247017.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值