Parametre boyutu ve adının bilinmediği birçok jQuery örnekleri gördüm.
URL'mde yalnızca 1 dize olacak:
http://example.com?sent=yes
Sadece tespit etmek istiyorum:
- Var mı
sent
? - "Evet" e eşit mi?
Parametre boyutu ve adının bilinmediği birçok jQuery örnekleri gördüm.
URL'mde yalnızca 1 dize olacak:
http://example.com?sent=yes
Sadece tespit etmek istiyorum:
sent
?Yanıtlar:
Burada en iyi çözüm .
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]);
}
}
};
URL'nin, olduğunu varsayarak bu işlevi bu şekilde kullanabilirsiniz
http://dummy.com/?technology=jquery&blog=jquerybyexample
.
var tech = getUrlParameter('technology');
var blog = getUrlParameter('blog');
false
veya dönmek null
için
&
veya =
parametre değerinde varsa düzgün çalışmaz .
2020'den çözüm
Elimizde: http://example.com?sent=yes
let searchParams = new URLSearchParams(window.location.search)
Mu gönderilen mevcut ?
searchParams.has('sent') // true
Öyle mi eşit "evet" için?
let param = searchParams.get('sent')
ve sonra sadece karşılaştırın.
if ('URLSearchParams' in window) { // Browser supports URLSearchParams}
Buraya bakın
URL'de depolanan dinamik değişkenleri parametre olarak almak ve komut dosyalarınızla kullanıma hazır JavaScript değişkenleri olarak saklamak için jQuery kod snippet'i:
$.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
boşluklu örnek params
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;
o olmalıreturn decodeURI(results[1]) || 0;
|| 0
sonuç için zaten bir kontrol olduğu için neden parçaya ihtiyacı var, her zaman maç dizisini döndürmeyecek?
Bunu her zaman tek satır olarak yapıyorum. Şimdi params vars var:
params={};location.search.replace(/[?&]+([^=&]+)=([^&]*)/gi,function(s,k,v){params[k]=v})
Çok çizgili:
var params={};
window.location.search
.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(str,key,value) {
params[key] = value;
}
);
işlev olarak
function getSearchParams(k){
var p={};
location.search.replace(/[?&]+([^=&]+)=([^&]*)/gi,function(s,k,v){p[k]=v})
return k?p[k]:p;
}
hangi olarak kullanabilirsiniz:
getSearchParams() //returns {key1:val1, key2:val2}
veya
getSearchParams("key1") //returns val1
replace(/[?&;]+([^=]+)=([^&;]*)/gi
reconize için ";" bir ayırıcı olarak karakter.
var params={};window.location.hash.replace(/[#&]+([^=&]+)=([^&]*)/gi,function(str,key,value){params[key] = value;});
bu kullanılır : Bu, penceredeki karma'nın ajax istekleriyle güncellendiği AJAX gibi şeyler için yararlıdır, ancak bir kullanıcı da uri'ye gider. bir karma içerir.
Yine başka bir alternatif fonksiyon ...
function param(name) {
return (location.search.split(name + '=')[1] || '').split('&')[0];
}
param('t') == param('sent') == 'yes'
OP örneğinde. İşte bir düzeltme return (location.search.split(new RegExp('[?&]' + name + '='))[1] || '').split('&')[0]
:; Ayrıca eksik parametreler için boş dize aldığınız için parametrenin var olup olmadığını söyleyemeyeceğinizi unutmayın.
return (location.search.split('?' + name + '=')[1] || location.search.split('&' + name + '=')[1] || '').split('&')[0];
Çok geç olabilir. Ancak bu yöntem çok kolay ve basittir
<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"
});
GÜNCELLEME
URL eklentisi gerektirir: plugins.jquery.com/url
Teşekkürler -Ripounet
Ya da bu düzgün küçük işlevi kullanabilirsiniz, çünkü neden aşırı karmaşık çözümler?
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
}
basitleştirildiğinde ve seçildiğinde daha da iyi görünür:
var queryDict = {};
location.search.substr(1).split("&").forEach(function(item) {queryDict[item.split("=")[0]] = item.split("=")[1]})
sonuç: queryDict ['sent'] // tanımsız veya 'değer'
Şu yanıtı görseniz iyi olur: JavaScript'te sorgu dizesi değerlerini nasıl alabilirim?
Gizlice zirve
"?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"
Kullanma URLSearchParams
:
var params = new window.URLSearchParams(window.location.search);
console.log(params.get('name'));
Uyumluluk konusunda dikkatli olun (Çoğunlukla iyidir, ancak IE ve Edge farklı bir hikaye olabilir, uyumlu referans için bunu kontrol edin: https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams )
Bu basit ve benim için çalıştı
$.urlParam = function(name){
var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
return results[1] || 0;
}
url'niz http://www.yoursite.com?city=4 ise
bunu dene
console.log($.urlParam('city'));
Belki de Diş Hekimi JS'ye bir göz atmak isteyebilirsiniz ? (sorumluluk reddi: Kodu yazdım)
kod:
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"
Dentist JS ile temelde tüm dizelerde extract () işlevini çağırabilirsiniz (örn. document.URL.extract ()) ve bulunan tüm parametrelerin bir HashMap'ini geri alabilirsiniz. Ayırıcılarla ve her şeyle başa çıkmak için özelleştirilebilir.
Küçültülmüş sürüm <1kb
Umarım bu yardımcı olacak.
<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;
}
Bu çalışma demosunu deneyin http://jsfiddle.net/xy7cX/
API:
Bu yardımcı olmalı :)
kod
var url = "http://myurl.com?sent=yes"
var pieces = url.split("?");
alert(pieces[1] + " ===== " + $.inArray("sent=yes", pieces));
İşte bu harika kütüphane: https://github.com/allmarkedup/purl
basitçe yapmanıza izin veren
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
// ...
}
}
Örnek, jQuery kullandığınızı varsayar. Bunu sadece düz javascript olarak da kullanabilirsiniz, sözdizimi biraz farklı olacaktır.
Bu aşırı olabilir, ancak şu anda URI.js olarak adlandırılan URI'leri ayrıştırmak için oldukça popüler bir kütüphane var .
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>
Çok basit herhangi bir url kullanabilirsiniz ve değer alabilirsiniz
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, " "));
}
Kullanım Örneği
// query string: ?first=value1&second=&value2
var foo = getParameterByName('first'); // "value1"
var bar = getParameterByName('second'); // "value2"
Not: Bir parametre birkaç kez mevcutsa (? First = değer1 & saniye = değer2), ilk değeri (değer1) ve ikinci değeri (değer2) olarak alırsınız.
Bu size çalışmak için güzel bir nesne verecektir
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;
}
Ve sonra;
if (queryParameters().sent === 'yes') { .....
Bu Gazoris'in cevabına dayanır , ancak URL parametreleri çözer, böylece rakamlar ve harfler dışında veriler içerdiklerinde kullanılabilirler:
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;
}
URI.js kitaplığını kullanma ile ilgili başka bir örnek daha var .
Örnek soruları tam olarak istendiği gibi cevaplar.
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
Burada en iyi çözüm .
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, ' '));
};
Yukarıdaki işlevle, tek tek parametre değerlerini alabilirsiniz:
getUrlParameter('sent');
Sameer'in cevabının kahve versiyonu
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++
Sameer'ın cevabında hafif bir iyileştirme, önbellek her aramada tüm parametreler arasında ayrıştırmayı ve döngü oluşturmayı önlemek için kapanıyor
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];
}
})();
Bunu kullanıyorum ve işe yarıyor. 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"];
Vanilya JavaScript ile, parametreleri (location.search) kolayca alabilir, alt dizeyi (? Olmadan) alabilir ve '&' ile bölerek diziye dönüştürebilirsiniz.
UrlParams'ı yinelediğinizde, dizeyi tekrar '=' ile bölebilir ve 'params' nesnesine nesne [elmement [0]] = element [1] olarak ekleyebilirsiniz. Süper basit ve kolay erişilebilir.
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'];
Filename = "p & g.html" & uid = 66 gibi bir & içinde URL parametresi varsa ne olur?
Bu durumda, 1. işlev düzgün çalışmaz. Bu yüzden kodu değiştirdim
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]);
}
}
}
Kuşkusuz, aşırı cevaplanmış bir soruya cevabımı ekliyorum, ancak bunun avantajları var:
- jQuery dahil olmak üzere herhangi bir dış kütüphaneye bağlı değil
- Küresel işlev ad alanını kirletmemek, 'String'i genişletmek
- Herhangi bir küresel veri oluşturmamak ve eşleşme bulunduktan sonra gereksiz işlemler yapmak
- Kodlama sorunlarını ele alma ve kodlanmamış parametre adını kabul etme (varsayarak)
- Açık for
döngülerden kaçınma
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;
};
Sonra şöyle kullanırsınız:
var paramVal = "paramName".urlParamValue() // null if no match
Belirli bir URL'den belirli bir parametre bulmak istiyorsanız:
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"));
Parametre değerlerine bir nesne üzerinden erişebilmeniz için jQuery ve JSON kullanan başka bir çözüm.
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);
}
URL'nizin http://example.com/?search=hello+world&language=en&page=3
Bundan sonra sadece bu gibi parametreleri kullanmakla ilgilidir:
param.language
geri vermek
en
Bunun en yararlı kullanımı, sayfa yüklendiğinde çalıştırmak ve parametreleri ihtiyacınız olan her yerde kullanmak için genel bir değişken kullanmaktır.
Parametreniz sayısal değerler içeriyorsa, değeri ayrıştırın.
parseInt(param.page)
Hiçbir parametre param
yoksa sadece boş bir nesne olacaktır.
$.urlParam = function(name) {
var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
return results[1] || 0;
}