Ich habe viele jQuery-Beispiele gesehen, bei denen Parametergröße und Name unbekannt sind.
Meine URL wird immer nur 1 Zeichenfolge haben:
http://example.com?sent=yes
Ich möchte nur erkennen:
- Existiert
sent
? - Ist es gleich "Ja"?
Ich habe viele jQuery-Beispiele gesehen, bei denen Parametergröße und Name unbekannt sind.
Meine URL wird immer nur 1 Zeichenfolge haben:
http://example.com?sent=yes
Ich möchte nur erkennen:
sent
?Antworten:
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 verwenden, vorausgesetzt, die URL lautet ,
http://dummy.com/?technology=jquery&blog=jquerybyexample
.
var tech = getUrlParameter('technology');
var blog = getUrlParameter('blog');
false
oder null
für leere Suche zurück
&
oder =
ein Parameterwert vorhanden ist.
Lösung ab 2020
Wir haben: http://example.com?sent=yes
let searchParams = new URLSearchParams(window.location.search)
Does gesendet exist ?
searchParams.has('sent') // true
Ist es gleich "Ja"?
let param = searchParams.get('sent')
und dann vergleiche es einfach.
if ('URLSearchParams' in window) { // Browser supports URLSearchParams}
Siehe hier
jQuery-Codefragment, um die in der URL gespeicherten dynamischen Variablen als Parameter abzurufen und als JavaScript-Variablen zu speichern, die für die Verwendung mit Ihren Skripten bereit sind:
$.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
return results[1] || 0;
sollte es seinreturn decodeURI(results[1]) || 0;
|| 0
Teil, da es bereits eine Überprüfung für das Ergebnis gibt, würde es nicht immer das Übereinstimmungsarray zurückgeben?
Ich halte das immer als eine Zeile. Jetzt 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;
}
die Sie verwenden könnten als:
getSearchParams() //returns {key1:val1, key2:val2}
oder
getSearchParams("key1") //returns val1
replace(/[?&;]+([^=]+)=([^&;]*)/gi
, um ";" Charakter auch als Trennzeichen.
var params={};window.location.hash.replace(/[#&]+([^=&]+)=([^&]*)/gi,function(str,key,value){params[key] = value;});
Dies ist nützlich für Dinge wie AJAX, bei denen das Hash-In-Fenster mit Ajax-Anfragen aktualisiert wird, aber auch einer, bei dem der Benutzer zu einer Uri wechselt mit einem Hash.
Noch eine alternative Funktion ...
function param(name) {
return (location.search.split(name + '=')[1] || '').split('&')[0];
}
param('t') == param('sent') == 'yes'
im OP-Beispiel. Hier ist ein Fix : return (location.search.split(new RegExp('[?&]' + name + '='))[1] || '').split('&')[0]
; Beachten Sie auch, dass Sie nicht feststellen können, ob der Parameter vorhanden ist, da Sie eine leere Zeichenfolge für fehlende Parameter erhalten.
return (location.search.split('?' + name + '=')[1] || location.search.split('&' + name + '=')[1] || '').split('&')[0];
Vielleicht ist es zu spät. Diese Methode ist jedoch 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
Erfordert das URL-Plugin: plugins.jquery.com/url
Thanks -Ripounet
Oder Sie können diese nette kleine Funktion verwenden, denn warum überkomplizierte Lösungen?
function getQueryParam(param, defaultValue = undefined) {
location.search.substr(1)
.split("&")
.some(function(item) { // returns first occurence and stops
return item.split("=")[0] == param && (defaultValue = item.split("=")[1], true)
})
return defaultValue
}
was noch besser aussieht, wenn es vereinfacht und onelined ist:
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"
Verwenden von URLSearchParams
:
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 unterschiedliche Geschichten sein. Überprüfen Sie dies auf kompatible Referenzen: https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams )
Dieser ist einfach und hat für mich gearbeitet
$.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'));
Vielleicht möchten Sie Zahnarzt JS einen Blick geben? (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 (z. B. document.URL.extract ()) aufrufen und erhalten eine HashMap aller gefundenen Parameter zurück. Es ist auch anpassbar, um mit Trennzeichen und allem umzugehen.
Minimierte Version <1kb
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>
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;
}
Probieren Sie diese funktionierende Demo aus http://jsfiddle.net/xy7cX/
API:
Das sollte helfen :)
Code
var url = "http://myurl.com?sent=yes"
var pieces = url.split("?");
alert(pieces[1] + " ===== " + $.inArray("sent=yes", pieces));
Es gibt diese großartige Bibliothek: https://github.com/allmarkedup/purl
das erlaubt dir einfach zu machen
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 einfach als einfaches Javascript verwenden, die Syntax wäre dann etwas anders.
Dies könnte übertrieben, aber es ist eine ziemlich beliebte Bibliothek jetzt verfügbar für das Parsen von URIs, genannt URI.js .
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>
So einfach können Sie jede 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).
Dies gibt Ihnen ein schönes Objekt, mit dem Sie arbeiten können
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') { .....
Dies basiert auf der Antwort von Gazoris , aber die URL dekodiert die Parameter, damit 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;
}
Es gibt ein weiteres Beispiel für die Verwendung der Bibliothek URI.js.
Beispiel beantwortet die Fragen genau wie gestellt.
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');
Coffeescript-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++
Eine leichte Verbesserung von Sameers Antwort: 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];
}
})();
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"];
Mit Vanilla JavaScript können Sie einfach die Parameter (location.search) übernehmen, den Teilstring (ohne das?) Abrufen und ihn in ein Array umwandeln, indem Sie ihn durch '&' teilen.
Während Sie durch urlParams iterieren, können Sie die Zeichenfolge erneut mit '=' teilen und sie als Objekt [elmement [0]] = Element [1] zum Objekt 'params' 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'];
Was ist, wenn es einen 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]);
}
}
}
Zugegeben, ich füge meine Antwort einer überbeantworteten Frage hinzu, aber dies hat folgende Vorteile:
- Nicht abhängig von externen Bibliotheken, einschließlich jQuery
- Verschmutzen des globalen Funktionsnamensraums nicht durch Erweitern von 'String'
- Keine globalen Daten erstellen und keine unnötige Verarbeitung durchführen, nachdem eine Übereinstimmung gefunden wurde
- Behandlung von Codierungsproblemen und Akzeptieren (vorausgesetzt) eines nicht codierten Parameternamens
- Vermeiden Sie explizite 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
Wenn Sie einen bestimmten Parameter aus einer bestimmten URL suchen 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"));
Eine weitere Lösung, die jQuery und JSON verwendet, sodass 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
Die nützlichste Verwendung besteht darin, 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 keine Parameter vorhanden sind, handelt param
es sich nur um ein leeres Objekt.
$.urlParam = function(name) {
var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
return results[1] || 0;
}