วิธีตรวจสอบว่ามีค่าสตริงการสืบค้นผ่าน JavaScript หรือไม่?


97

ฉันจะตรวจสอบได้อย่างไรว่าสตริงการสืบค้นมี a 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 ที่ซ้อนกันและแสดงให้เห็นว่าเกิดอะไรขึ้น ณ จุดหนึ่งในโค้ด สำหรับกรณี stict ทั้งด้านซ้ายและด้านขวามือจะเป็นตัวเลขเสมอดังนั้นการเปลี่ยนไปใช้ตัวดำเนินการด้านความเสมอภาคที่เข้มงวดจะแตกต่างกันอย่างไร?
LorenVS

4
รหัสทำความสะอาด? ... ทำไมไม่คืนค่าดัชนีของการทดสอบแทนที่จะวางไว้ในคำสั่ง IF เบื้องต้นที่ไร้ประโยชน์โดยสิ้นเชิง
James

4
ฉันเห็นด้วยกับ JP คุณอาจเขียนวิธีแก้ปัญหาที่ถูกต้อง แต่โค้ดของคุณเลอะเทอะจริงๆ คุณดัดฟันที่ไหนคะ? คุณควรอ่าน "ส่วนที่ดี" ซึ่งรหัสที่เขียนลักษณะโดยไม่มีเครื่องหมายปีกกาได้รับการพิสูจน์แล้วว่าล้มเหลวภายใต้เงื่อนไขบางประการและทำให้เกิดความสับสนระหว่างการบำรุงรักษา

2
url.indexOf (field + '=')! = -1 ก็เพียงพอแล้ว ไม่สำคัญว่าจะอยู่ในช่วงเริ่มต้นหรือไม่
yyy

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 :)
Leia

1
Yoda จะพูดเกี่ยวกับนิพจน์ทั่วไป: "รหัสที่สั้นกว่าคือ .. อ่านง่ายกว่าไม่ใช่"
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

ตัวอย่างโค้ดจาวาสคริปต์ธรรมดาที่ตอบคำถามของคุณอย่างแท้จริง:

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

ตัวอย่างโค้ดจาวาสคริปต์ธรรมดาซึ่งพยายามค้นหาว่าพารามิเตอร์ 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

อีกหนึ่งตัวแปร แต่เกือบจะเหมือนกับโซลูชัน Gumbos:

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 {};
    }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.