URLSearchParams API
- URLSearchParams接口定义了一些实用的方法来处理URL
- 但是
不会解析完整 URL,需要传入类似location.search 但是如果字符串起始位置有 ? 的话会被去除。
var paramsString1 = "http://example.com/search?query=%40";
var searchParams1 = new URLSearchParams(paramsString1);
searchParams1.has("query");
searchParams1.has("http://example.com/search?query");
searchParams1.get("query");
searchParams1.get("http://example.com/search?query");
var paramsString2 = "?query=value";
var searchParams2 = new URLSearchParams(paramsString2);
searchParams2.has("query");
var url = new URL("http://example.com/search?query=%40");
var searchParams3 = new URLSearchParams(url.search);
searchParams3.has("query")
方法一:将URL参数解析成对象
function parseURLToObj(url = '') {
if (!url) throw new Error('url参数错误');
let search = url.indexOf('?') ? url.split('?')[1] : url;
let params = {};
for (const [key, value] of new URLSearchParams(search)) {
params[key] = value;
}
return params;
}
方法二:将对象解析成URL字符串
function parseObjToString(params = {}) {
let search = new URLSearchParams('');
Object.keys(params).forEach(key => {
search.append(key, params[key]);
})
return search.toString();
}
方法三:向URL中添加某个参数
function URLAddParams(url, params) {
let search = parseObjToString(params)
return url.indexOf('?') == -1 ? `${url}?${search}` : `${url}&${search}`
}
方法四:判断URL中是否有某个参数
static URLHasKey(url,key) {
if (!url) throw new Error('url参数错误');
let search = url.indexOf('?') ? url.split('?')[1] : url;
return new URLSearchParams(search).has(key);
}
方法五:判断URL中是否有value值
static URLHasValue(url,value) {
if (!url) throw new Error('url参数错误');
let search = url.indexOf('?') ? url.split('?')[1] : url;
var params = new URLSearchParams(search);
for(var paramsValue of params.values()) {
if (paramsValue === value) {
return true;
}
}
return false;
}