JQuery: Как получить параметры URL-адреса?
Новое для jQuery, и мне не удается получить параметры URL-адреса, которые генерирует мой сервер. У меня есть URL-адрес:
<span class="popuptest"><a href="www.example.com/test?param1=1¶m2=2">find param</a></span>
моя функция jquery выглядит так:
$(function() {
$('.popuptest a').live('click', function(event) {
$.extend({
getUrlVars: function(){
var vars = [], hash;
var hashes = this.href.slice(this.href.indexOf('?') + 1).split('&');
for(var i = 0; i < hashes.length; i++)
{
hash = hashes[i].split('=');
vars.push(hash[0]);
vars[hash[0]] = hash[1];
}
return vars;
},
getUrlVar: function(name){
return $.getUrlVars()[name];
}
});
var second = getUrlVars()["param2"];
alert(second);
return false;
});
});
нажатие на ссылку должно показать мне "2", но я ничего не получаю... никакой помощи для jQuery noob? спасибо заранее!
Я нашел это в блоге: http://jquery-howto.blogspot.com/2009/09/get-url-parameters-values-with-jquery.html
Ответы
Ответ 1
Вам не нужно jQuery для этой цели, вы можете использовать чистый JavaScript:
function getParameterByName( name,href )
{
name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
var regexS = "[\\?&]"+name+"=([^&#]*)";
var regex = new RegExp( regexS );
var results = regex.exec( href );
if( results == null )
return "";
else
return decodeURIComponent(results[1].replace(/\+/g, " "));
}
и вы можете вызвать функцию таким образом. getParameterByName(param1,href of your link)
DEMO
Ответ 2
небольшое улучшение, разбор URL только один раз, возврат массива или параметров:
function getURLParameters(url){
var result = {};
var hashIndex = url.indexOf("#");
if (hashIndex > 0)
url = url.substr(0, hashIndex);
var searchIndex = url.indexOf("?");
if (searchIndex == -1 ) return result;
var sPageURL = url.substring(searchIndex +1);
var sURLVariables = sPageURL.split('&');
for (var i = 0; i < sURLVariables.length; i++)
{
var sParameterName = sURLVariables[i].split('=');
result[sParameterName[0]] = sParameterName[1];
}
return result;
}
http://jsfiddle.net/shakhal/gXM3u/
Ответ 3
это так просто, все, что вам нужно сделать, это поместить имя переменной, которое вы хотите от URL-адреса, в эту функцию, тогда оно вернет вам значение переменной URL
function getParameterByName(name) {
return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search)||[,""])[1].replace(/\+/g, '%20'))||null;
}
Ответ 4
function getURLParameter(name) {
return decodeURI(
(RegExp(name + '=' + '(.+?)(&|$)').exec(location.search)||[,null])[1]
);
}
Ответ 5
Ваш jquery может быть
$(function() {
$('.popuptest a').live('click', function(event) {
$.extend({ getUrlVars: function(){
var vars = [], hash;
var hashes = $('.popuptest a').attr("href").slice($('.popuptest a').attr("href").indexOf('?') + 1).split('&');
for(var i = 0; i < hashes.length; i++)
{
hash = hashes[i].split('=');
vars.push(hash[0]);
vars[hash[0]] = hash[1];
}
return vars;
},
getUrlVar: function(name){
return $.getUrlVars()[name];
}
});
var second = $.getUrlVars()["param2"];
alert(second);
return false;
});
});
что нужно отметить:
- $. getUrlVars в строке - var second = $.getUrlVars() [ "param2" ];
- this.href заменяется на $('. popuptest a'). attr ( "href" )
Ответ 6
отсюда
$.urlParam = function(name){
var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
return results[1] || 0;
}
// example.com?param1=name¶m2=&id=6
$.urlParam('param1'); // name
$.urlParam('id'); // 6
$.urlParam('param2'); // null
Ответ 7
Так просто, вы можете использовать любой URL и получить значение в Javascript. И это полный набор кодов
<!DOCTYPE html>
<html>
<head>
<script>
var tech = getQueryVariable('filename');
function getQueryVariable(variable)
{
var query = window.location.search.substring(1);
var vars = query.split("&");
for (var i=0;i<vars.length;i++) {
var pair = vars[i].split("=");
if(pair[0] == variable){return pair[1];}
}
return(false);
}
alert(tech);
</script>
</head>
<body>
<p>Get parameters of a url</p>
</body>
</html>
Ответ 8
Некоторое время используя код ниже, но недавно обнаружил проблему с базой base64_encode в URL-адресе, имея == в конце, например:/index.php?a=1&b=2&c=Mw== &. д = 4
Использование getUrlVar ( "c" ) дает мне "Mw" в результате, но это должно быть "Mw ==", поэтому добавлена дополнительная строка:
$.extend({
getUrlVars: function(){
var vars = [], hash;
var hashes = $('.popuptest a').attr("href").slice($('.popuptest a').attr("href").indexOf('?') + 1).split('&');
for(var i = 0; i < hashes.length; i++)
{
hash = hashes[i].split('=');
vars.push(hash[0]);
if (hash.length > 2) hash[1] = hash.slice(1).join('=');
vars[hash[0]] = hash[1];
}
return vars;
},
getUrlVar: function(name){
return $.getUrlVars()[name];
}
});