Как проверить, присутствует ли значение строки запроса через JavaScript?

97

Как q=с помощью JavaScript или jQuery проверить, содержит ли строка запроса символ a ?

мрбла
источник
Это тоже может помочь: stackoverflow.com/a/12151322 - содержит информацию об URLSearchParams , например: var url = new URLSearchParams(location.search); url.has("my_great_query");возвращает, trueесли эта строка запроса находится в вашем URL- адресе . Затем вы можете получить его значение с помощью url.get("my_great_query");.
user1063287 05

Ответы:

109
var field = 'q';
var url = window.location.href;
if(url.indexOf('?' + field + '=') != -1)
    return true;
else if(url.indexOf('&' + field + '=') != -1)
    return true;
return false
LorenVS
источник
7
Множественные пути возврата - это личный выбор, я использую их, потому что считаю, что они приводят к более чистому коду, поскольку они помогают мне избежать вложенных операторов if и точно показывают, что происходит в определенном месте кода. Что касается случаев stict, и левая, и правая части всегда будут числами, так какая разница будет иметь переход на операторы строгого равенства?
LorenVS
4
Более чистый код? ... Почему бы просто не вернуть тест indexOf вместо того, чтобы помещать его в совершенно бесполезный предварительный оператор IF.
Джеймс
4
Я согласен с JP. Возможно, вы написали правильное решение, но ваш код действительно небрежный. Где у вас фигурные скобки? Вам следует прочитать «Хорошие части», где было доказано, что код, написанный в стиле без фигурных скобок, не работает при определенных условиях и вызывает путаницу во время обслуживания.
2
url.indexOf (field + '=')! = -1, я думаю, было достаточно. Неважно, в начале оно или нет
ггг
2
@yyy Нет, не было. Если бы у вас была строка запроса, например ?kodiaq=1, то вызов url.indexOf('q=')без префикса &или ?заставил бы вас поверить, что qпараметр присутствует.
michalstanko
115

Вы также можете использовать регулярное выражение:

/[?&]q=/.test(location.search)
Гамбо
источник
1
на самом деле это было бы больше похоже на: if (! new RegExp ("[? &] hfPageToken ="). test (s.data)) // если данные hfPageToken еще не представлены в запросе {s.data = s.data ? [s.data, tokenParam] .join ("&"): tokenParam; }
Dragos Durlut
9
Чтобы уточнить, это отлично работает if(/[?&]q=/.test(location.search)) { alert("match"); }(я был немного сбит с толку из-за комментария @DragosDurlut. :)
Лея
1
По поводу регулярных выражений Йода сказал бы: «Они короче, их легче читать, они не такие».
RayLoveless
24

Использование URL:

url = new URL(window.location.href);

if (url.searchParams.get('test')) {

}

РЕДАКТИРОВАТЬ: если вам грустно по поводу совместимости, я настоятельно рекомендую https://github.com/medialize/URI.js/ .

Дэмиен Рош
источник
4
Красиво, но без поддержки IE.
UpTheCreek
1
К сожалению, так выглядит @UpTheCreek. Пришлось переключить на совместимую версию. Мы можем мечтать.
Damien Roche
9

Пример простого кода javascript, который буквально отвечает на ваш вопрос:

return location.search.indexOf('q=')>=0;

Пример простого кода javascript, который пытается определить, существует ли параметр q и имеет ли он значение:

var queryString=location.search;
var params=queryString.substring(1).split('&');
for(var i=0; i<params.length; i++){
    var pair=params[i].split('=');
    if(decodeURIComponent(pair[0])=='q' && pair[1])
        return true;
}
return false;
Питер Дольберг
источник
7
Первый пример вернет истину дляfooq=bar
mickadoo
4

еще один вариант, но почти такой же, как решение Гумбоса:

var isDebug = function(){
    return window.location.href.search("[?&]debug=") != -1;
};
Humppakäräjät
источник
3

эта функция поможет вам получить параметр из URL-адреса в JS

function getQuery(q) {
    return (window.location.search.match(new RegExp('[?&]' + q + '=([^&]+)')) || [, null])[1];
}
Бафи
источник
2

В современных браузерах это стало намного проще благодаря URLSearchParamsинтерфейсу. Это определяет множество служебных методов для работы со строкой запроса URL-адреса.

Предполагая, что наш URL - это https://example.com/?product=shirt&color=blue&newuser&size=m, вы можете получить строку запроса, используя window.location.search:

const queryString = window.location.search;
console.log(queryString);
// ?product=shirt&color=blue&newuser&size=m

Затем вы можете проанализировать параметры строки запроса, используя URLSearchParams:

const urlParams = new URLSearchParams(queryString);

Затем вы можете вызвать любой из его методов для результата.

Например, URLSearchParams.get()вернет первое значение, связанное с заданным параметром поиска:

const product = urlParams.get('product')
console.log(product);
// shirt

const color = urlParams.get('color')
console.log(color);
// blue

const newUser = urlParams.get('newuser')
console.log(newUser);
// empty string

Вы можете использовать, URLSearchParams.has()чтобы проверить, существует ли определенный параметр:

console.log(urlParams.has('product'));
// true

console.log(urlParams.has('paymentmethod'));
// false

Для дальнейшего чтения нажмите здесь .

Плабон Датта
источник
0

Я использовал эту библиотеку раньше, она неплохо справляется с тем, что вам нужно. В частности: -

qs.contains(name)
    Returns true if the querystring has a parameter name, else false.

    if (qs2.contains("name1")){ alert(qs2.get("name1"));}
Гэвин Гилмор
источник
0

Это должно помочь:

function getQueryParams(){
    try{
        url = window.location.href;
        query_str = url.substr(url.indexOf('?')+1, url.length-1);
        r_params = query_str.split('&');
        params = {}
        for( i in r_params){
            param = r_params[i].split('=');
            params[ param[0] ] = param[1];
        }
        return params;
    }
    catch(e){
       return {};
    }
}
Аварийная кнопка
источник