Как получить параметр и значения строки запроса с помощью javascript (JQuery)?

Нажми на меня

$('.clickme').click(function(event) { event.preventDefault(); var stringId = $(this).attr("id"); var mId = stringId.substring(2) .... 

Я могу получить значение id с использованием идентификатора элемента привязки. Я думаю, что я должен получить его прямо из href. Итак, как мне получить значение id и status из HREF (строка запроса url)?

Я использую JQuery.

Спасибо за помощь.

UPDATE: Также как я могу получить все значение URL-адреса .. ie "test.php? Id = 100 & blah = blah"?

Этот код:

 function querySt(ji) { hu = $(".clickme").attr("href"); gy = hu.split("&"); for (i=0;i<gy.length;i++) { ft = gy[i].split("="); if (ft[0] == ji) { return ft[1]; } } } 

Чтобы использовать его:

 document.write(querySt("id")); document.write(querySt("status")); 

Ответьте на свое «обновление»:

http://ilovethecode.com/Javascript/Javascript-Tutorials-How_To-Easy/Get_Query_String_Using_Javascript.shtml

 var stringId = $(this).attr("id"); // this will return p_100 var stringId = $(this).attr("id").split('_')[1]; // this will return 100 var attr= $(this).attr("href"); // this will return all href attribute value 

ОБНОВИТЬ

 //href="test.php?id=100&status=pending&time=2009" var attrFromAnchor= $(this).attr("href").split('?')[1].split('&')[0].split('=')[1]; // returns 100 

Здесь есть много хороших решений, но я решил, что отправлю свое. Вот небольшая небольшая функция, которую я собрал вместе, которая будет анализировать строку запроса в формате либо из window.location.search, либо из предоставленного значения строки поиска;

Он возвращает хэш пар значений id, поэтому вы можете ссылаться на него в форме:

 var values = getQueryParams(); values['id'] values['blah'] 

Вот код:

 /* This function assumes that the query string provided will contain a ? character before the query string itself. It will not work if the ? is not present. In addition, sites which don't use ? to delimit the start of the query string (ie. Google) won't work properly with this script. */ function getQueryParams( val ) { //Use the window.location.search if we don't have a val. var query = val || window.location.search; query = query.split('?')[1] var pairs = query.split('&'); var retval = {}; var check = []; for( var i = 0; i < pairs.length; i++ ) { check = pairs[i].split('='); retval[decodeURIComponent(check[0])] = decodeURIComponent(check[1]); } return retval; } 

Чтобы получить значение строки запроса из URL без синтаксического анализа строки, вы можете:

 window.location.search.substr(1) 

Если вы хотите, чтобы имя страницы было раньше? вам все равно нужно выполнить синтаксический анализ строк:

 var path = window.location.pathname.replace(/^.*\/(.*)$/,'$1'); var query = path + window.location.search; //If your URL is http://www.myserver.com/some/long/path/big_long%20file.php?some=file&equals=me //you will get: big_long%20file.php?some=file&equals=me 

Надеюсь это поможет! Приветствия.

Вот краткая (но полная) реализация для получения всех пар имя / значение из строки запроса:

 function getQueryParams(qs) { qs = qs.split("+").join(" "); var params = {}; var tokens; while (tokens = /[?&]?([^=]+)=([^&]*)/g.exec(qs)) { params[decodeURIComponent(tokens[1])] = decodeURIComponent(tokens[2]); } return params; } //var query = getQueryParams(document.location.search); //alert(query.foo); 

Нет необходимости в jQuery, это решение работает во всех браузерах:

 function querySt(ji) { hu = window.location.search.substring(1); gy = hu.split("&"); for (i=0;i<gy.length;i++) { ft = gy[i].split("="); if (ft[0] == ji) { return ft[1]; } } return ""; } 

Ответы здесь устарели .

Посмотрите это решение, используя Vanilla JavaScript (ES5)

 var qd = {}; // qd stands for query dict document.getElementById("p_100")[0].href.split("?")[1].split("&").forEach(function(item) {var k = item.split("=")[0], v = decodeURIComponent(item.split("=")[1]); (k in qd) ? qd[k].push(v) : qd[k] = [v,]}) 

Мне нравится притворяться, что это oneliner , но мне сказали, что это не так. хм … Кто бы в любом случае раздробил цепные вызовы функций на новых линиях, верно?

пример:

 "test.php?id=100&status=pending&time=2009" > qd id: ["100"] status: ["pending"] time: ["2009"] // values can also be obtained like this > qd.id[0] // "100" > qd["id"][0] // "100" в "test.php?id=100&status=pending&time=2009" > qd id: ["100"] status: ["pending"] time: ["2009"] // values can also be obtained like this > qd.id[0] // "100" > qd["id"][0] // "100" 

* Он возвращает массивы, потому что он оптимизирован для многозначных ключей . Посмотрите здесь на фиктивные решения (без массивов).

Примечание. Чтобы научить старые браузеры новому .forEach вы можете ввести этот полиполк из Mozilla (MDN).