Вопрос по jquery, php, javascript, query-string, anchor – Как получить параметр строки запроса и значения, используя JavaScript (Jquery)?

1

Нажми на меня

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

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

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

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

ОБНОВИТЬ: Кроме того, как мне получить все значения URL-адреса ... т.е. "test.php? Id = 100" и "blah = blah"?

Вы должны подстроку это. Если вам нужен пример, оставьте комментарий. Josh Stodola

Ваш Ответ

6   ответов
3

Этот код:

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

Хорошо ... так что я должен найти его через цикл? Я думал, что смогу получить к нему доступ напрямую ... что-то вроде attr (& quot; status & quot;) !!! TigerTiger
Как насчет добавления некоторых вызовов decodeURIComponent?
Это будет работать для всего, кроме идентификатора. Ключ для этого с использованием этого кода будет «test.php? Id» не & quot; id & quot ;. Вы должны сначала удалить все, прежде чем & quot;? & Quot; затем разделить на амперсанды.
спасибо за ответ TigerTiger
Теперь вы можете просто выполнить querySt (& quot; status & quot;); Я не думаю, что у jQuery есть встроенная функция для разбора URI.
0

Нет необходимости в 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 "";
}
0

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

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(docu,ment.location.search);
//alert(query.foo);
спасибо, я попробую. TigerTiger
Однострочный регулярное выражение не работает с сафари и IE (бесконечный цикл). Исправление состоит в том, чтобы иметь отдельную строку для «var pattern = / [? & Amp;]? ([^ =] +) = ([^ & Amp;] *) / g;», а затем используйте «quot; pattern.exec». (достаточное количество) & Quot ;. Кстати, что такое "qs.split (" + ")" за? Если URL закодирован, не должно быть знака плюс.
0

Ответы здесьoutdated сейчас.

See this solution using 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, но мне сказали, что нет.hmm...Who would split chained function calls on new lines anyways, right?

пример:

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

* Возвращает массивы, потому что этоoptimized for multi-valued keys, ПосмотритеВот заdummy решения (без массивов).

note: Научить старые браузеры новым.forEach Вы можете ввестиэтот полифилл из Мозиллы (MDN).

1

Здесь есть много хороших решений, но я решил опубликовать свое собственное. Вот небольшая быстрая функция, которую я создал вместе, которая будет анализировать строку запроса в формате либо из 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

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

Также следует добавить условие, если после инициализации отсутствует строка запроса, т.е.if (!query) return []; передquery.split('?')[1] линия
@ Атес Горал, вы абсолютно правы. Это не принимает во внимание этот случай. Я обновил свое решение в соответствии с вашим предложением.
Эта реализация не принимает во внимание имена и значения в кодировке URL.
1
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

UPDATE

//href="test.php?id=100&status=pending&time=2009"
var attrFromAnchor= $(this).attr("href").split('?')[1].split('&')[0].split('=')[1]; // returns 100
спасибо за ваш ответ .. я могу получить значение из идентификатора элемента (уже сделано) .. но мне нужно получить его из URL привязки. TigerTiger
@Wbdvlpr проверить обновление
Посмотрите на мой ответ выше, он должен работать.

Похожие вопросы