Як перевірити, чи присутнє значення рядка запиту через JavaScript?


97

Як я можу перевірити, чи містить рядок запиту q=в ньому за допомогою JavaScript або jQuery?


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

Відповіді:


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

7
Кілька шляхів повернення - це особистий вибір, я використовую їх, оскільки, на мою думку, вони ведуть до більш чистого коду, оскільки вони допомагають мені уникати вкладених операторів if і точно показують, що відбувається в певний момент коду. Що стосується суворих справ, і ліва, і права сторона завжди будуть цифрами, то яка різниця від переходу на оператори суворої рівності?
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; }
Драгош Дурлут

9
Тільки для уточнення, це чудово працює if(/[?&]q=/.test(location.search)) { alert("match"); }(я був трохи розгублений через коментар @DragosDurlut. :)
Лея

1
Щодо регулярних виразів Йода сказав би: "Коротший код вони .. легше читати, вони ні".
RayLoveless

24

Використання URL:

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

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

}

EDIT: якщо вам сумно щодо сумісності, я настійно рекомендую 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;
};

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 {};
    }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.