Ho visto molti esempi di jQuery in cui la dimensione e il nome del parametro sono sconosciuti.
Il mio URL avrà solo 1 stringa:
http://example.com?sent=yes
Voglio solo rilevare:
- Esiste
sent
? - È uguale a "sì"?
Ho visto molti esempi di jQuery in cui la dimensione e il nome del parametro sono sconosciuti.
Il mio URL avrà solo 1 stringa:
http://example.com?sent=yes
Voglio solo rilevare:
sent
?Risposte:
La migliore soluzione qui .
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]);
}
}
};
E questo è come è possibile utilizzare questa funzione assumendo l'URL è,
http://dummy.com/?technology=jquery&blog=jquerybyexample
.
var tech = getUrlParameter('technology');
var blog = getUrlParameter('blog');
false
o null
per ricerca vuota
&
o =
un parametro.
Soluzione dal 2020
Abbiamo: http://example.com?sent=yes
let searchParams = new URLSearchParams(window.location.search)
Non ha inviato esistere ?
searchParams.has('sent') // true
È uguale a "sì"?
let param = searchParams.get('sent')
e poi basta confrontarlo.
Snippet di codice jQuery per ottenere le variabili dinamiche archiviate nell'URL come parametri e memorizzarle come variabili JavaScript pronte per l'uso con gli script:
$.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
parametri di esempio con spazi
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;
esso dovrebbe esserereturn decodeURI(results[1]) || 0;
|| 0
parte in quanto esiste già un controllo per il risultato, non restituirebbe sempre l'array delle partite?
Lo attengo sempre come una riga. Ora params ha i var:
params={};location.search.replace(/[?&]+([^=&]+)=([^&]*)/gi,function(s,k,v){params[k]=v})
multi-foderato:
var params={};
window.location.search
.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(str,key,value) {
params[key] = value;
}
);
come una funzione
function getSearchParams(k){
var p={};
location.search.replace(/[?&]+([^=&]+)=([^&]*)/gi,function(s,k,v){p[k]=v})
return k?p[k]:p;
}
che potresti usare come:
getSearchParams() //returns {key1:val1, key2:val2}
o
getSearchParams("key1") //returns val1
replace(/[?&;]+([^=]+)=([^&;]*)/gi
riconciliazione ";" carattere anche come separatore.
var params={};window.location.hash.replace(/[#&]+([^=&]+)=([^&]*)/gi,function(str,key,value){params[key] = value;});
questo è utile per cose come AJAX in cui l'hash nella finestra viene aggiornato con richieste ajax ma uno anche l'utente per andare a un uri contenente un hash.
Ancora un'altra funzione alternativa ...
function param(name) {
return (location.search.split(name + '=')[1] || '').split('&')[0];
}
param('t') == param('sent') == 'yes'
nell'esempio OP. Ecco una correzione: return (location.search.split(new RegExp('[?&]' + name + '='))[1] || '').split('&')[0]
; Si noti inoltre che non è possibile stabilire se il parametro esiste perché si ottiene una stringa vuota per i parametri mancanti.
return (location.search.split('?' + name + '=')[1] || location.search.split('&' + name + '=')[1] || '').split('&')[0];
Potrebbe essere troppo tardi. Ma questo metodo è molto facile e semplice
<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"
});
AGGIORNAMENTO
Richiede il plug-in url: plugins.jquery.com/url
Grazie -Ripounet
Oppure puoi usare questa piccola funzione ordinata, perché perché soluzioni troppo complicate?
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
}
che sembra ancora migliore se semplificato e integrato:
var queryDict = {};
location.search.substr(1).split("&").forEach(function(item) {queryDict[item.split("=")[0]] = item.split("=")[1]})
risultato: queryDict ['sent'] // undefined o 'value'
È meglio vedere questa risposta: come posso ottenere i valori della stringa di query in JavaScript?
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"
Utilizzando URLSearchParams
:
var params = new window.URLSearchParams(window.location.search);
console.log(params.get('name'));
Fai attenzione alla compatibilità (per lo più va bene, ma IE e Edge, potrebbero essere storie diverse, controlla questo per riferimento compatibile: https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams )
Questo è semplice e ha funzionato per me
$.urlParam = function(name){
var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
return results[1] || 0;
}
quindi se il tuo URL è http://www.yoursite.com?city=4
prova questo
console.log($.urlParam('city'));
Forse potresti dare un'occhiata al dentista JS ? (disclaimer: ho scritto il codice)
codice:
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"
con Dentist JS, puoi praticamente chiamare la funzione extract () su tutte le stringhe (es. document.URL.extract ()) e otterrai una HashMap di tutti i parametri trovati. È anche personalizzabile per gestire i delimitatori e tutto il resto.
Versione ridotta <1kb
Spero che questo possa aiutare.
<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;
}
Prova questa demo funzionante http://jsfiddle.net/xy7cX/
API:
Questo dovrebbe aiutare :)
codice
var url = "http://myurl.com?sent=yes"
var pieces = url.split("?");
alert(pieces[1] + " ===== " + $.inArray("sent=yes", pieces));
C'è questa grande biblioteca: https://github.com/allmarkedup/purl
che ti permette di fare semplicemente
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
// ...
}
}
L'esempio presuppone che tu stia utilizzando jQuery. Potresti anche usarlo come semplice javascript, la sintassi sarebbe quindi leggermente diversa.
Questo potrebbe essere eccessivo, ma v'è una biblioteca piuttosto popolare ora disponibile per URI parsing, chiamati 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>
Così semplice che puoi usare qualsiasi URL e ottenere valore
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, " "));
}
Esempio di utilizzo
// query string: ?first=value1&second=&value2
var foo = getParameterByName('first'); // "value1"
var bar = getParameterByName('second'); // "value2"
Nota: se un parametro è presente più volte (? First = value1 & second = value2), otterrai il primo valore (value1) e il secondo valore come (value2).
Questo ti darà un bell'oggetto con cui lavorare
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;
}
E poi;
if (queryParameters().sent === 'yes') { .....
Questo si basa sulla risposta di Gazoris , ma l'URL decodifica i parametri in modo che possano essere utilizzati quando contengono dati diversi da numeri e lettere:
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;
}
C'è un altro esempio con l'utilizzo della libreria URI.js.
L'esempio risponde alle domande esattamente come richiesto.
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
La migliore soluzione qui .
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, ' '));
};
Con la funzione sopra, puoi ottenere singoli valori di parametro:
getUrlParameter('sent');
Versione Coffeescript della risposta di Sameer
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++
Un leggero miglioramento della risposta di Sameer, memorizza i parametri della cache in chiusura per evitare di analizzare e scorrere tutti i parametri ogni volta che chiama
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];
}
})();
Lo uso e funziona. 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"];
Con JavaScript vaniglia, puoi facilmente prendere i parametri (location.search), ottenere la sottostringa (senza il?) E trasformarla in un array, suddividendolo per '&'.
Mentre si scorre attraverso urlParams, è possibile quindi dividere nuovamente la stringa con '=' e aggiungerla all'oggetto 'params' come oggetto [elmement [0]] = element [1]. Super semplice e di facile accesso.
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'];
Che cosa succede se è presente un parametro URL URL come nome file = "p & g.html" & uid = 66
In questo caso la 1a funzione non funzionerà correttamente. Quindi ho modificato il codice
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]);
}
}
}
Devo ammettere che sto aggiungendo la mia risposta a una domanda con risposta eccessiva, ma questo ha i vantaggi di:
- Non dipende da alcuna libreria esterna, incluso jQuery
- Non inquina lo spazio dei nomi delle funzioni globali, estendendo 'String'
- Non creare dati globali e fare elaborazioni non necessarie dopo la corrispondenza trovata
- Gestire i problemi di codifica e accettare (assumendo) un nome di parametro non codificato
- Evitare for
loop espliciti
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;
};
Quindi lo useresti come:
var paramVal = "paramName".urlParamValue() // null if no match
Se vuoi trovare un parametro specifico da un URL specifico:
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"));
Un'altra soluzione che utilizza jQuery e JSON, in modo da poter accedere ai valori dei parametri tramite un oggetto.
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);
}
Supponendo che il tuo URL sia http://example.com/?search=hello+world&language=en&page=3
Dopodiché si tratta solo di utilizzare i parametri in questo modo:
param.language
ritornare
en
L'utilizzo più utile di questo è eseguirlo al caricamento della pagina e utilizzare una variabile globale per utilizzare i parametri ovunque sia necessario.
Se il tuo parametro contiene valori numerici, analizza il valore.
parseInt(param.page)
Se non ci sono parametri param
sarà solo un oggetto vuoto.
$.urlParam = function(name) {
var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
return results[1] || 0;
}