Fork me on GitHub

面试题之JavaScript 有一个url 'http://www.youdao.com/newcard.html?sid=50&a=5&add=9&type=all',请写一个获取url中'?'后制定参数值的函数

小编才疏学浅,若文章、答案有错误之处,欢迎邮件通知小编及时修改,同时也可以面试题投稿。最后祝大家共同进步!
有一个url 'http://www.youdao.com/newcard.html?sid=50&a=5&add=9&type=all',请写一个获取url中'?'后制定参数值的函数
答案:


    /**
     * 获取某一个name值的参数
     * @param    {string}      name 想要获取的参数名
     * @param    {string}      str  可选参数,传入类似*=*&*=*格式的str,默认是location.search
     * @return   {string}           返回查询的结果
     */
    function getUrlValue(name, str) {
      if (!name) {
        return "";
      }
      var reg = new RegExp("(^|[?&])" + name + "=([^&]*)(&|$)");
      var url = str || window.location.search;
      var match = url.match(/\??[^#]*/);
      if (!match || match[0].length === 1) {
        return tmp;
      }
      var result = match[0].match(reg);
      if (result != null) {
        return decodeURIComponent(result[2]);
      } else {
        return "";
      }
    }

    /**
     * 格式化url参数(也可以传入固定字符串)
     * @param    {string}      str 可选参数,传入类似*=*&*=*格式的str,默认是location.search
     * @return   {json}          返回格式化之后的key,value对象
     */
    function getUrl(str) {
      var tmp = {};
      var url = str || window.location.search;
      // 保存?和#之间的部分内容
      var match = url.match(/\??[^#]*/);
      if (!match || match[0].length === 1) {
        return tmp;
      }
      var reg = /([^?&]*)=([^&]*)/g;
      // 保存符合键值对格式的结果数组
      var paramArr = match[0].match(reg);
      for (var i = 0; i < paramArr.length; i++) {
        var arr = paramArr[i].match(/([^?&]*)=([^&]*)/),
          key = arr[1],
          value = decodeURIComponent(arr[2] || "");
        tmp[key] = value;
      }
      return tmp;
    }

posted @ 2019-09-22 19:56  较瘦  阅读(136)  评论(0编辑  收藏  举报
知识点文章整理