jQuery aracılığıyla (veya olmadan) query string değerlerini almanın eklentisiz bir yolu var mı?
Eğer öyleyse, nasıl? Değilse, bunu yapabilecek bir eklenti var mı?
Güncelleme: Eylül-2018
Basit ve iyi (ancak tam değil) tarayıcı desteği olan URLSearchParams kullanabilirsiniz.
const urlParams = new URLSearchParams(window.location.search);
const myParam = urlParams.get('myParam');
Orijinal
Bu amaç için jQuery'ye ihtiyacınız yoktur. Sadece biraz saf JavaScript kullanabilirsiniz:
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:
// query string: ?foo=lorem&bar=&baz
var foo = getParameterByName('foo'); // "lorem"
var bar = getParameterByName('bar'); // "" (present with empty value)
var baz = getParameterByName('baz'); // "" (present with no value)
var qux = getParameterByName('qux'); // null (absent)
Not: Bir parametre birkaç kez mevcutsa (?foo=lorem&foo=ipsum
), ilk değeri (lorem
) alırsınız. Bu konuda bir standart yoktur ve kullanımlar değişiklik gösterir, örneğin bu soruya bakın: Yinelenen HTTP GET sorgu anahtarlarının yetkili konumu.
NOT: İşlev büyük/küçük harfe duyarlıdır. Büyük/küçük harfe duyarlı olmayan parametre adını tercih ediyorsanız, RegExp'e 'i' değiştiricisini ekleyin
Bu, aynı sonucu daha kısa ve öz bir şekilde elde etmek için yeni URLSearchParams specs temel alınarak yapılan bir güncellemedir. Aşağıdaki "URLSearchParams" başlıklı cevaba bakın.
Snipplr.com'daki Roshambo'nun Get URL Parameters with jQuery | Improved adresinde bunu başarmak için basit bir betiği var. Onun betiği ile sadece istediğiniz parametreleri kolayca çekebilirsiniz.
Özeti şu:
$.urlParam = function(name, url) {
if (!url) {
url = window.location.href;
}
var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(url);
if (!results) {
return undefined;
}
return results[1] || undefined;
}
Ardından parametrelerinizi sorgu dizesinden alın.
Yani URL/sorgu dizesi xyz.com/index.html?lang=de
olsaydı.
Sadece var langval = $.urlParam('lang');
deyin ve işte oldu.
UZBEKJON'un bu konuda da harika bir blog yazısı var, Get URL parameters & values with jQuery.
Eğer jQuery kullanıyorsanız, jQuery BBQ: Back Button & Query Library gibi bir kütüphane kullanabilirsiniz.
...jQuery BBQ, hem karma durum yönetimi hem de parça / sorgu dizesi ayrıştırma ve birleştirme yardımcı yöntemleri ile birlikte tam bir
.deparam()
yöntemi sağlar.
Düzenleme: Deparam Örneği Ekleniyor:
var DeparamExample = function() {
var params = $.deparam.querystring();
//nameofparam is the name of a param from url
//code below will get param if ajax refresh with hash
if (typeof params.nameofparam == 'undefined') {
params = jQuery.deparam.fragment(window.location.href);
}
if (typeof params.nameofparam != 'undefined') {
var paramValue = params.nameofparam.toString();
}
};
Eğer sadece düz JavaScript kullanmak istiyorsanız...
var getParamValue = (function() {
var params;
var resetParams = function() {
var query = window.location.search;
var regex = /[?&;](.+?)=([^&;]+)/g;
var match;
params = {};
if (query) {
while (match = regex.exec(query)) {
params[match[1]] = decodeURIComponent(match[2]);
}
}
};
window.addEventListener
&& window.addEventListener('popstate', resetParams);
resetParams();
return function(param) {
return params.hasOwnProperty(param) ? params[param] : null;
}
})();
Yeni HTML Geçmiş API'si ve özellikle history.pushState()
ve history.replaceState()
nedeniyle, URL değişebilir ve bu da parametrelerin ve değerlerinin önbelleğini geçersiz kılar.
Bu sürüm, geçmiş her değiştiğinde dahili parametre önbelleğini güncelleyecektir.