Làm cách nào để kiểm tra xem giá trị chuỗi truy vấn có hiện diện qua JavaScript hay không?


91

Làm cách nào để kiểm tra xem chuỗi truy vấn có chứa a q=trong đó bằng JavaScript hoặc jQuery hay không?


Điều này cũng có thể hữu ích: stackoverflow.com/a/12151322 - chứa thông tin về URLSearchParams , ví dụ: var url = new URLSearchParams(location.search); url.has("my_great_query");trả về truenếu chuỗi truy vấn đó nằm trong url của bạn. Sau đó, bạn có thể nhận được giá trị của nó với url.get("my_great_query");.
user1063287

Câu trả lời:


104
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
Nhiều đường dẫn trả về là một lựa chọn cá nhân, tôi sử dụng chúng vì tôi nghĩ chúng dẫn đến mã sạch hơn, vì chúng giúp tôi tránh các câu lệnh if lồng nhau và hiển thị chính xác những gì đang diễn ra tại một điểm nhất định trong mã. Đối với các trường hợp stict, cả bên tay trái và bên tay phải sẽ luôn là số, vậy việc chuyển sang các toán tử bình đẳng nghiêm ngặt sẽ tạo ra sự khác biệt gì?
LorenVS

4
Mã sạch hơn? ... Tại sao không chỉ trả lại kiểm tra indexOf, thay vì đặt nó trong một câu lệnh IF sơ bộ hoàn toàn vô dụng.
James

4
Tôi đồng ý với JP. Bạn có thể đã viết giải pháp chính xác, nhưng mã của bạn thực sự cẩu thả. Dấu ngoặc nhọn ở đâu? Bạn nên đọc "Các phần tốt" nơi mã được viết một kiểu không có dấu ngoặc nhọn đã được chứng minh là không thành công trong các điều kiện nhất định và gây ra nhầm lẫn trong quá trình bảo trì.

2
url.indexOf (field + '=')! = -1 tôi nghĩ là đủ. Không quan trọng nếu nó ở đầu hay không
yyy

2
@yyy Không, không phải vậy. Nếu bạn có một chuỗi truy vấn như thế ?kodiaq=1, thì việc gọi url.indexOf('q=')mà không đặt tiền tố bằng &hoặc ?sẽ khiến bạn tin rằng qtham số hiện diện.
michalstanko

113

Bạn cũng có thể sử dụng một biểu thức chính quy:

/[?&]q=/.test(location.search)

1
thực ra nó sẽ giống như: if (! new RegExp ("[? &] hfPageToken ="). test (s.data)) // nếu dữ liệu hfPageToken chưa có trong yêu cầu {s.data = s.data ? [s.data, tokenParam] .join ("&"): tokenParam; }
Dragos Durlut

9
Chỉ cần làm rõ, điều này hoạt động tuyệt vời if(/[?&]q=/.test(location.search)) { alert("match"); }(tôi đã hơi bối rối do nhận xét của @DragosDurlut. :)
Leia

1
Yoda sẽ nói về cụm từ thông dụng: "Mã ngắn hơn thì chúng .. dễ đọc hơn thì không".
RayLoveless

23

Sử dụng URL:

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

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

}

CHỈNH SỬA: nếu bạn buồn về khả năng tương thích, tôi thực sự khuyên bạn nên https://github.com/medialize/URI.js/ .


4
Tốt, nhưng không hỗ trợ IE.
UpTheCreek

1
@UpTheCreek đáng buồn xuất hiện như vậy. Tôi đã phải chuyển nó sang một phiên bản tương thích. Chúng ta có thể mơ.
Damien Roche

9

Mẫu mã javascript đơn giản trả lời câu hỏi của bạn theo nghĩa đen:

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

Mẫu mã javascript thuần túy cố gắng tìm xem tham số q có tồn tại hay không và nếu nó có giá trị:

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
Ví dụ đầu tiên sẽ trả về true chofooq=bar
mickadoo

4

một biến thể khác, nhưng gần giống như giải pháp Gumbos:

var isDebug = function(){
    return window.location.href.search("[?&]debug=") != -1;
};

3

hàm này giúp bạn lấy tham số từ URL trong JS

function getQuery(q) {
    return (window.location.search.match(new RegExp('[?&]' + q + '=([^&]+)')) || [, null])[1];
}


2

Trong các trình duyệt hiện đại, điều này đã trở nên dễ dàng hơn rất nhiều, nhờ vào URLSearchParamsgiao diện. Điều này xác định một loạt các phương thức tiện ích để làm việc với chuỗi truy vấn của một URL.

Giả sử rằng URL của chúng tôi là https://example.com/?product=shirt&color=blue&newuser&size=m, bạn có thể lấy chuỗi truy vấn bằng cách sử dụng window.location.search:

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

Sau đó, bạn có thể phân tích cú pháp các tham số của chuỗi truy vấn bằng cách sử dụng URLSearchParams:

const urlParams = new URLSearchParams(queryString);

Sau đó, bạn có thể gọi bất kỳ phương thức nào của nó trên kết quả.

Ví dụ: URLSearchParams.get()sẽ trả về giá trị đầu tiên được liên kết với tham số tìm kiếm đã cho:

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

Bạn có thể sử dụng URLSearchParams.has()để kiểm tra xem một tham số nhất định có tồn tại hay không:

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

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

Để đọc thêm vui lòng bấm vào đây .


0

Tôi đã sử dụng thư viện này trước đây, nó thực hiện khá tốt những gì bạn đang theo đuổi. Đặc biệt:-

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

    if (qs2.contains("name1")){ alert(qs2.get("name1"));}

0

Điều này sẽ giúp:

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 {};
    }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.