Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[js] 第12天 写一个获取当前url查询字符串中的参数的方法 #36

Open
haizhilin2013 opened this issue Apr 27, 2019 · 52 comments
Labels
js JavaScript

Comments

@haizhilin2013
Copy link
Collaborator

第12天 写一个获取当前url查询字符串中的参数的方法

@haizhilin2013 haizhilin2013 added the js JavaScript label Apr 27, 2019
@coderfe
Copy link

coderfe commented May 9, 2019

function params() {
  const search = window.location.search;
  search = search.substr(1, search.length);
  const res = {};
  if (!search) return res;
  search.split('&').map(item => {
    const [key, value] = item.split('=');
    res[key] = decodeURIComponent(value);
  });
  return res;
}

@qqdnnd
Copy link

qqdnnd commented May 20, 2019

function urlParam(){
    const param = {};
    location.search.replace(/([^&=?]+)=([^&]+)/g,(m,$1,$2)=> param[$1] = $2);
    return param;
}

@tzjoke
Copy link

tzjoke commented May 29, 2019

不考虑IE的话,直接使用url api

@Damon99999
Copy link

Damon99999 commented Jun 18, 2019

url = "https://github.com/kk?tab=stars&assetId=311&page=DETAIL&projectPhase=2";
function splitUrl(url) {
    if(typeof url !== "string") return;
    var obj = {};
    url.split("?")[1].split("&").forEach(item => {
        var arr = [key, value] = item.split("=")
        obj[arr[0]] = arr[1];
    })
    console.log(obj);
}
splitUrl(url);
window.location.search // 可以直接获取,如果结合上面方法可以省一些代码

@pma934
Copy link

pma934 commented Jun 28, 2019

function urlParam(url){
    const param = {};
    url.replace(/[?&](.*?)=([^&]*)/g,(m,$1,$2)=> param[$1] = $2);
    return param;
}

@bWhirring
Copy link

function getParams(name) {
	const { search }  = window.location;
	const params = new URLSearchParams(search);
	return params.get(name)
}

@zzccww
Copy link

zzccww commented Jul 4, 2019

window.location.search.match(/(\w)+(?==)/g)

@Konata9
Copy link

Konata9 commented Jul 11, 2019

const getLocationParams = () => {
  const paramsMap = new Map();
  if (location.search) {
    // 第一个字符串为 ?
    location.search
      .substr(1)
      .split("&")
      .forEach((param) => {
        const [key, value] = param.split("=");
        paramsMap.set(key, value);
      });
  }

  return paramsMap;
};

const getLocationParam = (key) => getLocationParams().get(key);

@shufangyi
Copy link

const parsingURLSearch = url => {
  const searchs = url.match(/[^?&=]*=[^?&=]*/g)
  return (
    searchs &&
    searchs.reduce(
      (pre, s) => ({
        ...pre,
        [s.split('=')[0]]: s.split('=')[1]
      }),
      {}
    )
  )
}

@Vi-jay
Copy link

Vi-jay commented Jul 26, 2019

const url = "www.baidu.com?asd=asd%asd&dsa=2";
function getParamsByUrl(url) {
  const obj = {};
  url.replace(/([^?&]+)=([^?&]+)/g, (__, c1, c2) => {
    obj[c1] = c2;
  });
  return obj
}
console.log(getParamsByUrl(url));//{ asd: 'asd%asd', dsa: '2' }

@AchillesV
Copy link

AchillesV commented Jul 29, 2019

const getParmas = (url) => {
  return url.split('&').map((Param) => {
    return Param.split('=')[1]
  })
}

@jiamianmao
Copy link

function getParams(url, key) {
   let oUrl = new URL(url)
  return oUrl.searchParams.get(key)
}

@10901182936
Copy link

@coderfe const定义的常量不能赋值吧

@wsypower
Copy link

const getURLParameters = url =>
  (url.match(/([^?=&]+)(=([^&]*))/g) || []).reduce(
    (a, v) => (
      (a[v.slice(0, v.indexOf("="))] = v.slice(v.indexOf("=") + 1)), a
    ),{}
  );
getURLParameters(window.location.href) 

@xcLtw
Copy link

xcLtw commented Sep 3, 2019

function getQueryString(name) {
    const reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
    const r = location.search.substr(1).match(reg);
    if (r != null) return decodeURI(r[2]);
    return null;
}

@diandianzd
Copy link

const url = "https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E6%B5%8F%E8%A7%88%E5%99%A8%E5%86%85%E6%A0%B8%E9%83%BD%E6%9C%89%E5%93%AA%E4%BA%9B&rsv_pq=d10f9e03002ad5ae&rsv_t=7308xq%2FYDOMBWPsvXbUpTRo6FpYwkCts0RWBt1BKtKXc0%2FPcfNNKNoe%2Bxxc&rqlang=cn&rsv_enter=1&rsv_dl=tb&rsv_sug3=2&rsv_sug1=1&rsv_sug7=001&rsv_n=2&rsv_sug2=0&inputT=682&rsv_sug4=703&rsv_sug=9"


res = url.substr(url.indexOf('?') + 1).split('&').reduce((pre,cur)=>{
  const [key, value] = cur.split("=");
  pre.set(key,value)
  return pre
},new Map())

console.log(res.get('ie'))

@0x3c
Copy link

0x3c commented Oct 23, 2019

/**
 * @param {string} url
 * @return {object}
 */
function queryParams(url) {
  const queryStr = url.split("?")[1];
  if (!queryStr) return {};
  return queryStr.split("&").reduce((obj, str) => {
    const [k, v] = str.split("=");
    obj[k] = v;
    return obj;
  }, {});
}

@YeChang
Copy link

YeChang commented Dec 22, 2019

//第12天 写一个获取当前url查询字符串中的参数的方法

function params(url) {
  var kvs = url.substring(url.indexOf("?") + 1).split("&");
  var res = {};
  kvs.map(param => {
    var [key, value] = param.split("=");
    res[key] = value;
  });
  return res;
}

const url =
  "https://s.taobao.com/search?q=%E7%83%AD%E6%B0%B4%E5%A3%B6&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.2017.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306";

const res = params(url);

console.log(res.ie);

@crazyming9528
Copy link

function getQueryString(name) {
var string = window.location.search.substr(1);
if (!string) return;
var res = {};
string = string.replace(/&&/g, "&");//将参数中可能存在的 && 替换为统一的 &
string.split("&").forEach(function (item) {
var temp = item.split("=");
res[temp[0]] = temp[1];
});
return res[name];
}

@rni-l
Copy link

rni-l commented Jan 10, 2020

function getQuery(str) {
  const arr = str.split('?')
  if (!arr[1]) return {}
  return arr[1].split('&').reduce((acc, cur) => {
    const val = cur.split('=')
    return {
      ...acc,
      [decodeURIComponent(val[0])]: decodeURIComponent(val[1])
    }
  }, {})
}

@susanforme
Copy link

let str=window.location.search.replace("?","");
function getParams(str){
  let params={};
  let ary = str.split("&");
  ary.forEach(e=>{
    let results=e.split("=");
    params[results[0]]=results[1];
  });
  return params;
}

@c37csq
Copy link

c37csq commented Mar 14, 2020

function getRequest (str) {
var arr = []
var string = str.split("?")[1] // ['id=39']
if (string.indexOf("&") !== -1) {
for(var i = 0; i < string.split("&").length; i ++) {
var obj = {}
var item = string.split("&")[i]
var name = item.split("=")[0];
var value = unescape(item.split("=")[1]);
obj[name] = value
arr.push(obj)
}
return arr
} else {
var obj = {}
var name = string.split("=")[0]
var value = string.split("=")[1]
obj[name] = value
return obj
}
}

@OceanFlooor
Copy link

let url = 'https://www.raven.com?a=param1&b=param2'

function getParams(url) {
  let reg = /[^?&=]+=[^&=]*/g
  let arr, map = new Map()
  while((arr = reg.exec(url)) !== null) {
    let mapArr = arr[0].split('=')
    map.set(mapArr[0], mapArr[1])
  }
  return map
}
console.log(getParams(url)) // Map { 'a' => 'param1', 'b' => 'param2' }

@qiqingfu
Copy link

qiqingfu commented Apr 6, 2020

const url = "https://www.baidu.com/?a=1&b=2&c=3";

const getQuery = str => {
  const startIndex = str.indexOf('?');
  const endIndex = str.lastIndexOf('?');

  if (startIndex !== endIndex) {
    return url;
  }

  const queryString = str.slice(startIndex + 1);
  const map = {};

  queryString.split("&")
    .forEach(item => {
      if (item) {
        const [key, value] = item.split("=");
        map[key] = value;
      }
    });

  return  map;
};

console.log(getQuery(url));

@larry0442
Copy link

const getSearchParam = (param) => {
  const search = window.location.search;
  let res = {};
  search.slice(1).split('&').forEach(item=> {
    const [key, value] = item.split('=');
    res[key] = value;
  })
  return res[param];
}

大概思路是这样,应该可以更完善

@artoriaforDY
Copy link

let url='baidu.com?aaa=1&bbb=2';
let obj={};
url.replace(/(\w*)(=)(\w*)/g,(match,s1,s2,s3)=>obj[s1]=s3);
console.log(obj);

@blueRoach
Copy link

blueRoach commented May 28, 2020

楼上大佬的, 之前一直理解不了[^&=?],后来懂了,[]里面^是取反,而且除了‘/’其他的都不用转义

      function getParam(url){
        let params = {}
        url.replace(/([^&=?]+)=([^&]+)/g, (m, s1, s2) => params[s1] = s2)
        return params
      }

@13168335674
Copy link

13168335674 commented Jun 2, 2020

const getUrlQuery = (url = location.href) => {
    try {
      return [...new URL(url).searchParams].reduce(
        (pre, [key, value]) => Object.assign(pre, { key, value }),
        {},
      );
    } catch {
      throw new Error(`url格式不正确。url: ${url}`);
    }
  };

@giggleCYT
Copy link

function fn() {
            let url = window.location.search;
            url = url.replace(/\?/, '');
            return url.replace(/&/g, ',')
        }

@songer8
Copy link

songer8 commented Jun 24, 2020

function getQuerySring(key) {
    let querySring = window.location.search;
    if (querySring) {
        let queryStringWithoutQuestionMark = querySring.slice(1);
        let querySringArr = queryStringWithoutQuestionMark.split('&');
        let value = null;
        querySringArr.forEach((item) => {
            if (item.split('=')[0] === key) {
                value = item.split('=')[1];
            }
        })
        return value;
    } else {
        return null;
    }
}

@laboonly
Copy link

function getSearch (url) { let prams = {} url.split('?')[1].split('&').forEach(element => { let arr = element.split("="); prams[arr[0]] = arr[1] }); return prams; }

@MrZ2019
Copy link

MrZ2019 commented Sep 8, 2020

function params() {
const search = window.location.search;
search = search.substr(1, search.length);
const res = {};
if (!search) return res;
search.split('&').map(item => {
const [key, value] = item.split('=');
res[key] = decodeURIComponent(value);
});
return res;
}

@MrZ2019
Copy link

MrZ2019 commented Sep 8, 2020

function urlParam(){
const param = {};
location.search.replace(/([^&=?]+)=([^&]+)/g,(m,$1,$2)=> param[$1] = $2);
return param;
}

@wangzhangbo5916
Copy link

function getURLParams(search = '') {
    const params = Object.create(null);
    search.replace(/([^&=?]+)=([^&]+)/g, (m, $1, $2) => {
        console.log(m, $1, $2)
        params[$1] = $2;
    });
    return params;
}

console.log(getURLParams('?name=name&age=3'));
console.log(getURLParams('?name=name&&age=3'));
console.log(getURLParams('?'));
console.log(getURLParams(''));

注意[^&=?]中的^表示取反,意思是除了&=?外的其他字符

@m7yue
Copy link

m7yue commented Oct 10, 2020

const getParams = () => {
  const serachStr = window.location.search.slice(1)
  let res = {}
  serachStr.split('&').map(item => {
    const [k, v] = item.split('=')
    res[k] = v
  })
  return res
}

@zebratt
Copy link

zebratt commented Jan 15, 2021

function queryUrlParams(url) {
  const res = {};

  if (url.indexOf("?") === -1) {
    return res;
  }

  if (typeof URL !== "undefined") {
    const urlObj = new URL(url);

    for (const [key, value] of urlObj.searchParams.entries()) {
      res[key] = value;
    }

    return res;
  } else {
    const search = url.split("?")[1];
    const pairs = search.split("&");

    return pairs.reduce((acc, cur) => {
      const [key, value] = cur.split("=");

      acc[key] = value;

      return acc;
    }, res);
  }
}

@VaynePeng
Copy link

function getUrlParams() {
  let url = window.location.search
  let urlParams = new URLSearchParams(url)
  let params = {}
  for (const [key, value] of urlParams) {
    params[key] = value
  }
  return params
}

@lxt-ing
Copy link

lxt-ing commented Apr 25, 2021

function getParams(){
        let params = location.href.split('?')[1];
        let finalParams = {};
        if(params){
            params.split('&').map(i=>{
                let single = i.split('=');
                (single[0] && single[1] )?  finalParams[single[0]] =  single[1]:''
            })
        }
        return finalParams
    }

@378406712
Copy link

const url = "http://www.h-camel.com/show/36.html?a=b&b=c";
function sliceStr(url) {
let obj = {};
const data = url.split("?")[1].split("&");

data.forEach((item, index) => {
let items = item.split("=");
obj[items[0]] = items[1];
});
return obj;
}
console.log(sliceStr(url));

@cielaber
Copy link

function getParams(url){
let arr = url.split('?')[1].split('&');
let obj={}
arr.forEach(item=>{
obj[item.split('=')[0]] = item.split('=')[1]
})
return obj;
}

@Believe-xi
Copy link

 var hash = location.hash.split('#')[1].split('?')
  var hashObj = {
  }
  for (let i = 0; i < hash.length; i++) {
    hashObj[hash[i].split('=')[0]] = hash[i].split('=')[1]
  }
  console.log(hashObj);

@amikly
Copy link

amikly commented Oct 30, 2021

正则表达式

function getUrlParam(url) {
    const param = {};
    url.replace(/([^&=?]+)=([^&]+)/g, (match, $1, $2) => (param[$1] = $2));

    // const obj = {};
    // url.replace(/(\w*)(=)(\w*)/g, (match, key, operator, value) => {
    //   obj[key] = value;
    // });

    return param;
}
console.log(getUrlParam("http://localhost:8080?a=1&b=2&c=3&d="));

split方法

// split方法
function getUrlParam() {
    const search = window.location.search;
    search.slice(1);
    // search = search.substr(1);

    const res = {};
    if (!search) {
        return res;
    }

    search.split("&").map((item) => {
        const [key, value] = item.split("=");
        // decodeURIComponent()将已编码 URI 中所有能识别的转义序列转换成原字符
        res[key] = decodeURIComponent(value);
    });

    return res;
}

@VaynePeng
Copy link

let params = new URLSearchParams(location.search)
let paramsJSON = {}
for (const [index, item] of params) {
  paramsJSON[index] = item
}

@tk12138
Copy link

tk12138 commented Nov 17, 2021

<script> // 获取url中的参数 function getParams(url){ const paramsObj = url.split('?')[1] const params = paramsObj.split('&') const res = {} params.forEach(value => { const paramsKey = value.split('=')[0] res[paramsKey] = value.split('=')[1] }) console.log(res) } const myUrl = 'http://www.baidu.com?name=zs&age=18&sex=gender' getParams(myUrl) // {name: 'zs', age: '18', sex: 'gender'} </script>

@github-cxtan
Copy link

function GetUrlParament(data) {
let getUrlStr = data.slice(data.indexOf('?') + 1, data.length);
let array = getUrlStr.split('&');
console.log(array);
}

@yxllovewq
Copy link

const getQuery = () => {
let query = {};
for({ groups: { k, v, k2, v2 } } of [...decodeURIComponent(location.search).matchAll(/(?\w+)=(?.+?)&|(?\w+)=(?.+)$/g)]) {
k ? query[k] = v : query[k2] = v2;
}
return query;
}

@xiaoqiangz
Copy link

// 写一个获取当前url查询字符串中的参数的方法
function getParamsByUrl(href, param) {
let obj = {}
href.split('?')[1].split('&').forEach(item => {
arr = item.split('=')
let [key, value] = item.split('=')
obj[key] = value
})
console.log(obj[param])
}
getParamsByUrl('www.baidu.com?a=11&b=22&c=33', 'c')

@wenxd
Copy link

wenxd commented May 26, 2022

  function getQueryParams() {
    let paramsStr = window.location.search
    let queryArr = paramsStr.substr(1).split('&')
    let params = []
    queryArr.map((item) => {
      params.push(item.split('=')[0])
    })
    console.log(params);
  }
  getQueryParams()

@HoseaGuo
Copy link

HoseaGuo commented Aug 10, 2022

在hash路由后面加 ?keyA=valueA,通过location.search获取到的是空字符串,
如链接是:http://127.0.0.1:8080#/home?a&b=234,通过location.search获取到的是""

所以想到的是用正则来处理这种情况:

function getParams(url) {
  let paramsObj = {};
  let regExp = /\?([^#]+)/;
  let match = url.match(regExp);
  if (match && match[1]) {
    match[1].split('&').forEach(item => {
      let [key, value] = item.split('=');
      if (value) paramsObj[key] = value;
    })
  }
  return paramsObj;
}
let paramsObj = getParams('http://127.0.0.1:8080#/home?a&b=234');
console.log(paramsObj) // {b: '234'}
let paramsObj2 = getParams('http://127.0.0.1:8080?a&b=234#/home');
console.log(paramsObj2) // {b: '234'}

@wyy-g
Copy link

wyy-g commented Sep 10, 2022

function getUrlStr(url){
var search = url ? url.split('?')[1] : location.search,
res = {},
arr = search.split('&');
for(var i = 0; i < arr.length; i++){
var arg = arr[i].split('=');
res[arg[0]] = arg[1];
}
return res;
}

console.log(getUrlStr('https://mp.csdn.net/mdeditor?ad=2&wq=5'))

@wangyuanjian
Copy link

需要注意一下参数中有数组的情况,比如 http://127.0.0.1:5501/index.html?hostName=xxx3&ports=1&ports=5

原生 API 中的 getAll() 很好可以参考

@lili-0923
Copy link

window.location.search

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
js JavaScript
Projects
None yet
Development

No branches or pull requests