URL parametresini jQuery veya düz JavaScript kullanarak nasıl alabilirim?


619

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:

  1. Var mı sent?
  2. "Evet" e eşit mi?




Şimdiye kadar gördüğüm en iyi çözüm [burada] [1] [1]: stackoverflow.com/a/901144/3106590
hmfarimani

1
Şimdi bunun için URI.js adlı bir eklenti / kütüphane var: github.com/medialize/URI.js
alexw

Yanıtlar:


1211

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');

8
Teşekkürler! Ama bunu kopyalarken, orada sonuna doğru sıfır genişlikli bir boşluk (\ u200b) içeren kötü bir sürpriz buldum. Komut dosyasının görünmez bir sözdizimi hatası olması.
Christofer Ohlsson

11
Boş aramaya dönmek falseveya dönmek nulliçin
Stefano Caravana

4
Bu çözüm benim için oldukça iyi çalışıyor var var var var sPageURL = decodeURI (window.location.search.substring (1)); beyaz boşluklara% 20 karakter dönüştürmek için ve ayrıca parametre eşleşmezse hiçbir şey yerine boş bir dize döndürür.
Christophe

18
Cevabı, bu yorumun üstündeki tüm yorum kodu değişikliklerini içerecek şekilde güncelledik.
Rob Evans

7
Kod çözme parametre değerinde yapılmalıdır (Iouri'nin önerdiği gibi). Kod çözme URL'de yapılırsa (yanıtta olduğu gibi), kodlanmış &veya =parametre değerinde varsa düzgün çalışmaz .
zakinster

287

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.


16
Bence bu tarayıcılar arasında desteklenmiyor, neden bir tane kullanmalıyım? referans - developer.mozilla.org/tr-TR/docs/Web/API/URLSearchParams
p_champ

1
@p_champ haklısın. Ancak URLSearchParams
Optio

2
şu anda IE / Edge'de çalışmıyor, bu yüzden özellik algılama: if ('URLSearchParams' in window) { // Browser supports URLSearchParams} Buraya bakın
mfgmicha

4
Ben ve hedef kitlem için yeterince iyi. caniuse.com/#feat=urlsearchparams
jontsai

4
@p_champ Edge v17'de destek aldı (Nisan 2018). IE ölsün.
Ryan DuVal

198

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

12
Not: özel vb parametre veya Umlaute olarak karakterler Yani yerine yaşandığında kod çözme için gereken return results[1] || 0;o olmalıreturn decodeURI(results[1]) || 0;
Kai Noack

Sadece merak ediyorum, || 0sonuç için zaten bir kontrol olduğu için neden parçaya ihtiyacı var, her zaman maç dizisini döndürmeyecek?
AirWick219

@ AirWick219 uygun bir arıza güvenliği. gereksiz olsa da, temkinli
olmaktan

2
İşte büyük olasılıkla, orijinal kaynak: sitepoint.com/url-parameters-jquery ama bu cevap bazı yeni fikirler ekledi
bgmCoder

1
Bunun için jQuery kullanmaya değdiğinden emin değilim.
Quentin 2

88

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

Arama dizesini değiştiren çirkin bir hack ... ancak harici modüller veya jquery gerekmez. Bunu sevdim.
Bryce

4
@Bryce Aslında arama dizesini değiştirmez. .replace aslında yeni bir dize döndürür ve bu döndürülen dizeler params nesnesine işlenir.
AwokeKnowing

Güzel, kısa ve kabul edilen çözümün aksine, bir değere her ihtiyacınız olduğunda URL'yi yeniden yayınlamanız gerekmez. Hafifçe ile geliştirilebilir replace(/[?&;]+([^=]+)=([^&;]*)/gireconize için ";" bir ayırıcı olarak karakter.
Le Droid

açık ve ağrısız bir astar, benim için kabul edilen cevaptan daha iyi, ekstra libs yok.
Sam

Biri GET-sorgu sınırlayıcısı (soru işareti) yerine karma kullanırsa, 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.
Tommie

48

Yine başka bir alternatif fonksiyon ...

function param(name) {
    return (location.search.split(name + '=')[1] || '').split('&')[0];
}

adının bir dize olması gerekir. Bir cazibe gibi çalıştı ~
mintedsky

2
Bu benim favorim. Bu bir "şununla biter" türünde bir arama olsa da + 1. Örneğin, ad için "Telefon" a geçerseniz ve ayrıca "HomePhone" adında bir alan varsa, URL'de önce gelirse yanlış alanın değerini döndürebilir.
efreed

2
Bu yanlış! Örneğin 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.
oriadam

Çok basit ve zarif. Rüya gibi çalışır. Teşekkür ederim.
Anjana Silva

// (anahtarın yalnızca son kısmı yerine tam anahtarı var olmaya zorlamak için)return (location.search.split('?' + name + '=')[1] || location.search.split('&' + name + '=')[1] || '').split('&')[0];
Aaron

45

Ç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


2
Buna kim karar verirse, ilk önce deposu kontrol etmelisiniz. Kullanım değişti. $ .url.attr ('message') $ .url ("query") olur ve yalnızca tam sorguyu verir! Sadece bir parametre almak için: $ .url ("query"). Split ("=") [1] url github link
pseudozach

34

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:

tl; dr tek hatlı çözüm

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'

Peki ya kodlanmış karakterler ya da çok değerli anahtarlarınız varsa ?

Ş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"

3
dize bölünmesinin normal ifadeden de daha hızlı olması muhtemeldir. Bu, url'nin yalnızca bir kez ayrıştırılacağını düşünen bir faktör değildir.
Patrick

Bu, tarayıcılarda benim için mükemmel çalışan çözüm (ilk çözüm) - teşekkürler!
NickyTheWrench

1
@NickyTheWrench Bunu duymak harika, teşekkürler! Her neyse, bunun çok basit bir çözüm olduğunu unutmayın, özel karakterler içeren karmaşık URL parametreleri alırsanız, sağlanan bağlantıyı kontrol etmeniz daha iyi olur.
Qwerty

@Qwerty yup - kullanım durumum, parametrenin her zaman aynı olduğu vb.Çok basittir (temelde OP'nin tam olarak istediği şey) Tekrar teşekkürler!
NickyTheWrench

1
@BernardVanderBeken İlginç, yine de düzelttim, oldukça aptalca bir çözüm, altta kodlanmış karakterleri ve dizileri destekleyen çözüm çok daha iyi.
Qwerty

33

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 )


Çoğu tarayıcı bunu kullanamaz.
saf21

URLSearchParams, "+" özel karakterini bir boşlukla değiştirir. Dolayısıyla, url parametrenizde bir "+" varsa, değiştirilir.
Growler

11

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'));

10

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


5

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>

5

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;
}



3

İş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.


1
Bu kütüphane artık korunmuyor, ancak onu kullanıyorum ve harika. Yazar örneklerine dahil ettiği için bu sorgu dizesi parametrelerini almak için atm değil param kullandığınızdan emin olun.
Eylem Dan

3

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 .

Misal

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>


3

Ç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.


2

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') { .....

split (/ \? | \ & /) bunun anlamı
Selva Ganapathi

2

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;
}

2

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>


2
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');

Mükemmel cevap!
Srijani Ghosh

1

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++

1

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];
    }
})();

1

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"];

1

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'];

1

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]);
        }
    }
}

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 fordö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

1

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"));

0

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 paramyoksa sadece boş bir nesne olacaktır.



-1

bunu kullan

$.urlParam = function(name) {
  var results = new RegExp('[\?&amp;]' + name + '=([^&amp;#]*)').exec(window.location.href);
  return results[1] || 0;
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.