Ich habe viele jQuery-Beispiele gesehen, bei denen Parametergröße und -name unbekannt sind. Meine URL wird immer nur einen String haben:
http://example.com?sent=yes
Ich möchte nur Folgendes erkennen:
sent
?Beste Lösung hier .
var getUrlParameter = function getUrlParameter(sParam) {
var sPageURL = window.location.search.substring(1),
sURLVariables = sPageURL.split('&'),
sParameterName,
i;
for (i = 0; i < sURLVariables.length; i++) {
sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] === sParam) {
return sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);
}
}
};
Und so können Sie diese Funktion nutzen, vorausgesetzt, die URL lautet:http://dummy.com/?technology=jquery&blog=jquerybyexample
.
var tech = getUrlParameter('technology');
var blog = getUrlParameter('blog');
Lösung von 2019
Wir haben: http://example.com?sent=yes
let searchParams = new URLSearchParams(window.location.search)
Existiert gesendet ?
searchParams.has('sent') // true
Ist es gleich mit "Ja"?
let param = searchParams.get('sent')
und dann vergleichen Sie es einfach.
jQuery-Code-Snippet zum Abrufen der in der URL gespeicherten dynamischen Variablen als Parameter und zum Speichern dieser Variablen als JavaScript-Variablen zur Verwendung mit Ihren Skripten:
$.urlParam = function(name){
var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
if (results==null) {
return null;
}
return decodeURI(results[1]) || 0;
}
example.com?param1=name¶m2=&id=6
$.urlParam('param1'); // name
$.urlParam('id'); // 6
$.urlParam('param2'); // null
beispielparameter mit Leerzeichen
http://www.jquery4u.com?city=Gold Coast
console.log($.urlParam('city'));
//output: Gold%20Coast
console.log(decodeURIComponent($.urlParam('city')));
//output: Gold Coast
Ich klebe das immer als eine Zeile. Nun hat params die vars:
params={};location.search.replace(/[?&]+([^=&]+)=([^&]*)/gi,function(s,k,v){params[k]=v})
mehrzeilig:
var params={};
window.location.search
.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(str,key,value) {
params[key] = value;
}
);
als eine Funktion
function getSearchParams(k){
var p={};
location.search.replace(/[?&]+([^=&]+)=([^&]*)/gi,function(s,k,v){p[k]=v})
return k?p[k]:p;
}
was du verwenden könntest als:
getSearchParams() //returns {key1:val1, key2:val2}
oder
getSearchParams("key1") //returns val1
Vielleicht ist es zu spät. Aber diese Methode ist sehr einfach und unkompliziert
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.url.js"></script>
<!-- URL: www.example.com/correct/?message=done&year=1990 -->
<script type="text/javascript">
$(function(){
$.url.attr('protocol') // --> Protocol: "http"
$.url.attr('path') // --> Host: "www.example.com"
$.url.attr('query') // --> path: "/correct/"
$.url.attr('message') // --> query: "done"
$.url.attr('year') // --> query: "1990"
});
UPDATE
Benötigt das URL-Plugin: plugins.jquery.com/url
Danke -Ripounet
Noch eine alternative Funktion ...
function param(name) {
return (location.search.split(name + '=')[1] || '').split('&')[0];
}
Oder Sie können diese nette kleine Funktion benutzen, weil warum überkomplizierte Lösungen?
function getQueryParam(param) {
location.search.substr(1)
.split("&")
.some(function(item) { // returns first occurence and stops
return item.split("=")[0] == param && (param = item.split("=")[1])
})
return param
}
was vereinfacht und online noch besser aussieht:
var queryDict = {};
location.search.substr(1).split("&").forEach(function(item) {queryDict[item.split("=")[0]] = item.split("=")[1]})
Ergebnis: queryDict ['gesendet'] // undefiniert oder 'Wert'
Sie sehen diese Antwort besser: Wie kann ich Abfragezeichenfolgenwerte in JavaScript abrufen?
Sneak Peak
"?a=1&b=2&c=3&d&e&a=5&a=t%20e%20x%20t&e=http%3A%2F%2Fw3schools.com%2Fmy%20test.asp%3Fname%3Dståle%26car%3Dsaab"
> queryDict
a: ["1", "5", "t e x t"]
b: ["2"]
c: ["3"]
d: [undefined]
e: [undefined, "http://w3schools.com/my test.asp?name=ståle&car=saab"]
> queryDict["a"][1] // "5"
> queryDict.a[1] // "5"
URLSearchParams
verwenden:
var params = new window.URLSearchParams(window.location.search);
console.log(params.get('name'));
Seien Sie vorsichtig mit der Kompatibilität (Meistens ist es in Ordnung, aber IE und Edge können sich unterscheiden. Überprüfen Sie dies als kompatible Referenz: https://developer.mozilla.org/en-US/ docs/Web/API/URLSearchParams )
Vielleicht möchten Sie Zahnarzt JS einen Blick darauf werfen? (Haftungsausschluss: Ich habe den Code geschrieben)
Code:
document.URL == "http://helloworld.com/quotes?id=1337&author=kelvin&message=hello"
var currentURL = document.URL;
var params = currentURL.extract();
console.log(params.id); // 1337
console.log(params.author) // "kelvin"
console.log(params.message) // "hello"
mit Dentist JS können Sie grundsätzlich die Funktion extract () für alle Zeichenfolgen aufrufen (z. B. document.URL.extract ()) und Sie erhalten eine HashMap aller gefundenen Parameter zurück. Es ist auch anpassbar, um mit Trennzeichen und allem umzugehen.
Minimierte Version <1kb
Dieser ist einfach und hat für mich funktioniert
$.urlParam = function(name){
var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
return results[1] || 0;
}
wenn Ihre URL also http://www.yoursite.com?city=4 lautet
versuche dies
console.log($.urlParam('city'));
function GetRequestParam(param)
{
var res = null;
try{
var qs = decodeURIComponent(window.location.search.substring(1));//get everything after then '?' in URI
var ar = qs.split('&');
$.each(ar, function(a, b){
var kv = b.split('=');
if(param === kv[0]){
res = kv[1];
return false;//break loop
}
});
}catch(e){}
return res;
}
Ich hoffe das wird helfen.
<script type="text/javascript">
function getParameters() {
var searchString = window.location.search.substring(1),
params = searchString.split("&"),
hash = {};
if (searchString == "") return {};
for (var i = 0; i < params.length; i++) {
var val = params[i].split("=");
hash[unescape(val[0])] = unescape(val[1]);
}
return hash;
}
$(window).load(function() {
var param = getParameters();
if (typeof param.sent !== "undefined") {
// Do something.
}
});
</script>
Es gibt diese großartige Bibliothek: https://github.com/allmarkedup/purl
das ermöglicht es Ihnen, einfach zu tun
url = 'http://example.com?sent=yes';
sent = $.url(url).param('sent');
if (typeof sent != 'undefined') { // sent exists
if (sent == 'yes') { // sent is equal to yes
// ...
}
}
In diesem Beispiel wird davon ausgegangen, dass Sie jQuery verwenden. Sie könnten es auch nur als einfaches Javascript verwenden, die Syntax wäre dann etwas anders.
So einfach können Sie jede beliebige URL verwenden und Wert erhalten
function getParameterByName(name, url) {
if (!url) url = window.location.href;
name = name.replace(/[\[\]]/g, "\\$&");
var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
results = regex.exec(url);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(results[2].replace(/\+/g, " "));
}
Anwendungsbeispiel
// query string: ?first=value1&second=&value2
var foo = getParameterByName('first'); // "value1"
var bar = getParameterByName('second'); // "value2"
Hinweis: Wenn ein Parameter mehrmals vorhanden ist (? First = value1 & second = value2), erhalten Sie den ersten Wert (value1) und den zweiten Wert als (value2).
Das mag übertrieben sein, aber es gibt eine ziemlich beliebte Bibliothek zum Parsen von URIs, die RI.js heißt.
var uri = "http://example.org/foo.html?technology=jquery&technology=css&blog=stackoverflow";
var components = URI.parse(uri);
var query = URI.parseQuery(components['query']);
document.getElementById("result").innerHTML = "URI = " + uri;
document.getElementById("result").innerHTML += "<br>technology = " + query['technology'];
// If you look in your console, you will see that this library generates a JS array for multi-valued queries!
console.log(query['technology']);
console.log(query['blog']);
<script src="https://cdnjs.cloudflare.com/ajax/libs/URI.js/1.17.0/URI.min.js"></script>
<span id="result"></span>
Dies gibt Ihnen ein schönes Objekt zum Arbeiten
function queryParameters () {
var result = {};
var params = window.location.search.split(/\?|\&/);
params.forEach( function(it) {
if (it) {
var param = it.split("=");
result[param[0]] = param[1];
}
});
return result;
}
Und dann;
if (queryParameters().sent === 'yes') { .....
Es gibt ein weiteres Beispiel für die Verwendung der Bibliothek RI.js .
Beispiel beantwortet die Fragen genau so, wie sie gestellt wurden.
var url = 'http://example.com?sent=yes';
var urlParams = new URI(url).search(true);
// 1. Does sent exist?
var sendExists = urlParams.sent !== undefined;
// 2. Is it equal to "yes"?
var sendIsEqualtToYes = urlParams.sent == 'yes';
// output results in readable form
// not required for production
if (sendExists) {
console.log('Url has "sent" param, its value is "' + urlParams.sent + '"');
if (urlParams.sent == 'yes') {
console.log('"Sent" param is equal to "yes"');
} else {
console.log('"Sent" param is not equal to "yes"');
}
} else {
console.log('Url hasn\'t "sent" param');
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/URI.js/1.18.2/URI.min.js"></script>
http://example.com?sent=yes
Beste Lösung hier .
function getUrlParameter(name) {
name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
var regex = new RegExp('[\\?&]' + name + '=([^&#]*)');
var results = regex.exec(location.href);
return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' '));
};
Mit der obigen Funktion können Sie einzelne Parameterwerte erhalten:
getUrlParameter('sent');
Versuchen Sie diese funktionierende Demo http://jsfiddle.net/xy7cX/
API:
Dies sollte helfen, :)
Code
var url = "http://myurl.com?sent=yes"
var pieces = url.split("?");
alert(pieces[1] + " ===== " + $.inArray("sent=yes", pieces));
Dies basiert auf der Antwort von Gazoris , aber die URL dekodiert die Parameter, sodass sie verwendet werden können, wenn sie andere Daten als Zahlen und Buchstaben enthalten:
function urlParam(name){
var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
// Need to decode the URL parameters, including putting in a fix for the plus sign
// https://stackoverflow.com/a/24417399
return results ? decodeURIComponent(results[1].replace(/\+/g, '%20')) : null;
}
Zugegeben, ich füge meine Antwort zu einer überbeantworteten Frage hinzu, aber das hat folgende Vorteile:
- Nicht abhängig von externen Bibliotheken, einschließlich jQuery
- Kein Verschmutzen des globalen Funktionsnamensraums durch Erweiterung von 'String'
- Keine globalen Daten erstellen und unnötige Verarbeitung durchführen, nachdem Übereinstimmung gefunden wurde
- Behandeln von Codierungsproblemen und Akzeptieren (Annehmen) von nicht codierten Parameternamen
- Vermeiden von expliziten for
Schleifen
String.prototype.urlParamValue = function() {
var desiredVal = null;
var paramName = this.valueOf();
window.location.search.substring(1).split('&').some(function(currentValue, _, _) {
var nameVal = currentValue.split('=');
if ( decodeURIComponent(nameVal[0]) === paramName ) {
desiredVal = decodeURIComponent(nameVal[1]);
return true;
}
return false;
});
return desiredVal;
};
Dann würden Sie es verwenden als:
var paramVal = "paramName".urlParamValue() // null if no match
Eine leichte Verbesserung der Antwort von Sameer: Cache-Parameter werden geschlossen, um zu vermeiden, dass bei jedem Aufruf alle Parameter analysiert und durchlaufen werden
var getURLParam = (function() {
var paramStr = decodeURIComponent(window.location.search).substring(1);
var paramSegs = paramStr.split('&');
var params = [];
for(var i = 0; i < paramSegs.length; i++) {
var paramSeg = paramSegs[i].split('=');
params[paramSeg[0]] = paramSeg[1];
}
console.log(params);
return function(key) {
return params[key];
}
})();
Mit Vanilla JavaScript können Sie leicht die Parameter (location.search) nehmen, die Teilzeichenfolge (ohne das?) Abrufen und sie in ein Array umwandeln, indem Sie sie durch '&' aufteilen.
Während Sie urlParams durchlaufen, können Sie den String erneut mit '=' teilen und als object [elmement [0]] = element [1] zum 'params'-Objekt hinzufügen. Super einfach und leicht zugänglich.
http://www.website.com/?error=userError&type=handwritten
var urlParams = location.search.substring(1).split('&'),
params = {};
urlParams.forEach(function(el){
var tmpArr = el.split('=');
params[tmpArr[0]] = tmpArr[1];
});
var error = params['error'];
var type = params['type'];
Kaffeeskript-Version von Sameers Antwort
getUrlParameter = (sParam) ->
sPageURL = window.location.search.substring(1)
sURLVariables = sPageURL.split('&')
i = 0
while i < sURLVariables.length
sParameterName = sURLVariables[i].split('=')
if sParameterName[0] == sParam
return sParameterName[1]
i++
Wenn Sie einen bestimmten Parameter von einer bestimmten URL finden möchten:
function findParam(url, param){
var check = "" + param;
if(url.search(check )>=0){
return url.substring(url.search(check )).split('&')[0].split('=')[1];
}
}
var url = "http://www.yourdomain.com/example?id=1&order_no=114&invoice_no=254";
alert(findParam(url,"order_no"));
Was ist, wenn es einen & in URL-Parameter wie filename = "p & g.html" & uid = 66 gibt?
In diesem Fall funktioniert die 1. Funktion nicht richtig. Also habe ich den Code geändert
function getUrlParameter(sParam) {
var sURLVariables = window.location.search.substring(1).split('&'), sParameterName, i;
for (i = 0; i < sURLVariables.length; i++) {
sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] === sParam) {
return sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);
}
}
}
Ich benutze das und es funktioniert. http://codesheet.org/codesheet/NF246Tzs
function getUrlVars() {
var vars = {};
var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
vars[key] = value;
});
return vars;
}
var first = getUrlVars()["id"];
Eine weitere Lösung, die jQuery und JSON verwendet, damit Sie über ein Objekt auf die Parameterwerte zugreifen können.
var loc = window.location.href;
var param = {};
if(loc.indexOf('?') > -1)
{
var params = loc.substr(loc.indexOf('?')+1, loc.length).split("&");
var stringJson = "{";
for(var i=0;i<params.length;i++)
{
var propVal = params[i].split("=");
var paramName = propVal[0];
var value = propVal[1];
stringJson += "\""+paramName+"\": \""+value+"\"";
if(i != params.length-1) stringJson += ",";
}
stringJson += "}";
// parse string with jQuery parseJSON
param = $.parseJSON(stringJson);
}
Angenommen, Ihre URL ist http://example.com/?search=hello+world&language=en&page=3
Danach müssen nur noch die folgenden Parameter verwendet werden:
param.language
zurückgeben
en
Am nützlichsten ist es, sie beim Laden der Seite auszuführen und eine globale Variable zu verwenden, um die Parameter überall dort zu verwenden, wo Sie sie benötigen.
Wenn Ihr Parameter numerische Werte enthält, analysieren Sie einfach den Wert.
parseInt(param.page)
Wenn es keine Parameter gibt, ist param
nur ein leeres Objekt.