Gibt es eine bessere Möglichkeit, die location.search einer URL als Objekt zu konvertieren? Vielleicht nur effizienter oder abgespeckter? Ich verwende jQuery, aber reines JS kann auch funktionieren.
Hier ist eine reine JS-Funktion. Analysiert den Suchteil der aktuellen URL und gibt ein Objekt zurück. (Es ist ein bisschen ausführlich für die Lesbarkeit, wohlgemerkt.)
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;
}
In diesem Zusammenhang versuchen Sie nicht, die einzelnen Parameter in “einem JSON”, sondern in “einem Objekt” zu speichern. 😉
Aufbauend auf der ES6-Arbeit von @rafaelbiten habe ich Unterstützung für Parameter hinzugefügt, die keinen Wert haben, und Parameter-Arrays im Stil doppelter Einträge abgefragt.
const queryStringToJSObject = searchString => {
if (!searchString) return null;
return searchString
.replace(/^\?/, '') // Only trim off a single leading interrobang.
.split('&')
.reduce((result, next) => {
if (next === "") {
return result;
}
let pair = next.split('=');
let key = decodeURIComponent(pair[0]);
let value = typeof pair[1] !== "undefined" && decodeURIComponent(pair[1]) || undefined;
if (result.hasOwnProperty(key)) { // Check to see if this property has been met before.
if (Array.isArray(result[key])) { // Is it already an array?
result[key].push(value);
}
else { // Make it an array.
result[key] = [result[key], value];
}
}
else { // First time seen, just add it.
result[key] = value;
}
return result;
}, {}
);
};
// Simple read of query string
const searchData = queryStringToJSObject(window.location.search);
14356800cookie-checkwindow.location.search-Abfrage als JSONyes