thu*_*gsb 12 search jquery json window.location
有没有更好的方法将URL的location.search转换为对象?也许只是更有效率或减少?我正在使用jQuery,但纯JS也可以工作.
var query = window.location.search.substring(1), queryPairs = query.split('&'), queryJSON = {};
$.each(queryPairs, function() { queryJSON[this.split('=')[0]] = this.split('=')[1]; });
Run Code Online (Sandbox Code Playgroud)
Car*_*ann 24
这是一个纯JS函数.解析当前URL的搜索部分并返回一个对象.(对于可读性而言,它有点冗长.)
function searchToObject() {
var pairs = window.location.search.substring(1).split("&"),
obj = {},
pair,
i;
for ( i in pairs ) {
if ( pairs[i] === "" ) continue;
pair = pairs[i].split("=");
obj[ decodeURIComponent( pair[0] ) ] = decodeURIComponent( pair[1] );
}
return obj;
}
Run Code Online (Sandbox Code Playgroud)
在相关的说明中,您不是要将单个参数存储在"a JSON"中,而是存储在"对象"中.;)
Vyv*_*vIT 17
另请注意,有一个用于查询/操作搜索参数的 API:https : //developer.mozilla.org/en-US/docs/Web/API/URLSearchParams
var params = new URLSearchParams(window.location.search)
for (let p of params) {
console.log(p);
}
Run Code Online (Sandbox Code Playgroud)
Ali*_*our 13
如果您使用的是现代浏览器,则会产生与接受的答案相同的结果:
function searchToObject(search) {
return search.substring(1).split("&").reduce(function(result, value) {
var parts = value.split('=');
if (parts[0]) result[decodeURIComponent(parts[0])] = decodeURIComponent(parts[1]);
return result;
}, {})
}
Run Code Online (Sandbox Code Playgroud)
可能是简单案例的最短解决方案:
location.search
.slice(1)
.split('&')
.map(p => p.split('='))
.reduce((obj, [key, value]) => ({ ...obj, [key]: value }), {});
Run Code Online (Sandbox Code Playgroud)
小智 5
我的方法,简单干净
var params = "?q=Hello World&c=Awesome";
params = "{\"" +
params
.replace( /\?/gi, "" )
.replace( /\&/gi, "\",\"" )
.replace( /\=/gi, "\":\"" ) +
"\"}";
params = JSON.parse( params );
alert( decodeURIComponent( params.q ) );
alert( decodeURIComponent( params.c ) );Run Code Online (Sandbox Code Playgroud)