दिलचस्प पोस्ट
मैं iPhone पर UIViewControllers के बीच एक ऑब्जेक्ट कैसे साझा करूं? प्रपत्र प्रमाणन समयबाह्य बनाम सत्र कालबाह्य हमें नए कीवर्ड की आवश्यकता क्यों है और ओवरराइड को छुपाने के लिए डिफ़ॉल्ट व्यवहार क्यों है? Src और सामग्री के साथ स्क्रिप्ट टैग क्या होता है? सी ++ टेम्पलेट्स ट्यूरिंग-पूर्ण? बड़े परिणाम सेट MySQL के साथ स्ट्रीमिंग # 1071 – निर्दिष्ट कुंजी बहुत लंबी थी; अधिकतम कुंजी लंबाई 767 बाइट्स है क्यों printf () एक फ्लोट को एक डबल को बढ़ावा देता है? स्थानीय स्टोरेज के आकार को कैसे खोजें जावास्क्रिप्ट में टाइप बेशर क्या है? उपयोग पर सेट नाकाउंट सफ़ल पाठ 2 में अलग फ़ाइल प्रकार के लिए डिफ़ॉल्ट सिंटैक्स सेट करें त्रुटि :: एपीके के पैकेजिंग के दौरान डुप्लिकेट फ़ाइलें Javascript / JQuery का उपयोग करते हुए JSON वस्तुओं में अंतर सी # भाषण मान्यता – यह क्या उपयोगकर्ता ने कहा है?

जावास्क्रिप्ट में मैं क्वेरी स्ट्रिंग मान कैसे प्राप्त करूं?

क्या jQuery के माध्यम से क्वेरी स्ट्रिंग मानों को पुनर्प्राप्त करने का एक प्लग-इन कम तरीका है (या बिना)?

यदि हां, तो कैसे? यदि नहीं, तो क्या ऐसा प्लगइन है जो ऐसा कर सकता है?

वेब के समाधान से एकत्रित समाधान "जावास्क्रिप्ट में मैं क्वेरी स्ट्रिंग मान कैसे प्राप्त करूं?"

आपको उस उद्देश्य के लिए jQuery की ज़रूरत नहीं है आप कुछ शुद्ध जावास्क्रिप्ट का उपयोग कर सकते हैं:

function getParameterByName(name, url) { if (!url) url = window.location.href; name = name.replace(/[\[\]]/g, "\\$&"); var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"), results = regex.exec(url); if (!results) return null; if (!results[2]) return ''; return decodeURIComponent(results[2].replace(/\+/g, " ")); } 

उपयोग:

 // query string: ?foo=lorem&bar=&baz var foo = getParameterByName('foo'); // "lorem" var bar = getParameterByName('bar'); // "" (present with empty value) var baz = getParameterByName('baz'); // "" (present with no value) var qux = getParameterByName('qux'); // null (absent) 

नोट: यदि कोई पैरामीटर कई बार मौजूद है ( ?foo=lorem&foo=ipsum ), तो आपको पहला मान ( lorem ) मिलेगा इसके बारे में कोई मानक नहीं है और इसका उपयोग अलग-अलग होता है, उदाहरण के लिए यह प्रश्न देखें: डुप्लिकेट HTTP की अधिकृत स्थिति जीटी क्वेरी कुंजियां ।


यह नया यूआरएल की खोज के आधार पर एक अपडेट है। स्पेस स्पेस एक ही परिणाम को अधिक संक्षिप्त रूप से प्राप्त करने के लिए नीचे " URLSearchParams " नाम का उत्तर देखें

यहां पोस्ट किए गए कुछ समाधान अक्षम हैं। नियमित अभिव्यक्ति की खोज को हर बार जब स्क्रिप्ट को किसी पैरामीटर तक पहुंचने की आवश्यकता होती है, तो पूरी तरह अनावश्यक है, एक एकल फ़ंक्शन को एक एसोशिएटिव-अरै शैली ऑब्जेक्ट में विभाजित करने के लिए पर्याप्त है। यदि आप HTML 5 इतिहास एपीआई के साथ काम नहीं कर रहे हैं, तो प्रति पृष्ठ लोड एक बार ही यह आवश्यक है। यहां दिए गए अन्य सुझाव भी यूआरएल को सही ढंग से डीकोड करने में विफल हैं।

 var urlParams; (window. onpopstate = function () { var match, pl = /\+/g, // Regex for replacing addition symbol with a space search = /([^&=]+)=?([^&]*)/g, decode = function (s) { return decodeURIComponent (s.replace(pl, " ")); }, query = window. location .search. substring (1); urlParams = {}; while (match = search. exec (query)) urlParams[decode(match[1])] = decode(match[2]); })(); 

उदाहरण क्वेरी स्ट्रिंग:

?i=main&mode=front&sid=de8d49b78a85a322c4155015fdce22c4&enc=+Hello%20&empty

परिणाम:

  urlParams = { enc: " Hello ", i: "main", mode: "front", sid: "de8d49b78a85a322c4155015fdce22c4", empty: "" } alert(urlParams["mode"]); // -> "front" alert("empty" in urlParams); // -> true 

सरणी-शैली क्वेरी स्ट्रिंग्स को भी संभालने के लिए इसे आसानी से सुधार किया जा सकता है। इसका एक उदाहरण यहां है , लेकिन आरएफसी 3986 में सरणी-शैली के पैरामीटर को परिभाषित नहीं किया गया है इसलिए मैं इस कोड को स्रोत कोड से दूषित नहीं करेगा। उन लोगों के लिए जो "प्रदूषित" संस्करण में रुचि रखते हैं, कैंपबेलन के उत्तर नीचे देखें

इसके अलावा, जैसा कि टिप्पणियों में बताया गया है ; key=value जोड़े के लिए एक कानूनी सीमांकक है इसे संभाल करने के लिए एक और अधिक जटिल regex की आवश्यकता होगी ; या & , जो मुझे लगता है कि अनावश्यक है क्योंकि यह दुर्लभ है ; प्रयोग किया जाता है और मैं कहूंगा कि इससे भी ज्यादा संभावना नहीं है कि दोनों का उपयोग किया जाएगा यदि आपको समर्थन की आवश्यकता है ; इसके बजाय & , बस उन्हें regex में स्वैप करें।


यदि आप एक सर्वर-साइड प्रीप्रोसेसिंग भाषा का उपयोग कर रहे हैं, तो आप अपने मूल JSON फ़ंक्शंस का उपयोग आपके लिए भारी भार उठाने के लिए कर सकते हैं। उदाहरण के लिए, PHP में आप लिख सकते हैं:

 <script>var urlParams = <?php echo json_encode ($_GET, JSON_HEX_TAG);?>;</script> 

बहुत सरल!

ES2015 (ES6)

 const getParams = query => { if (!query) { return { }; } return (/^[?#]/.test(query) ? query.slice(1) : query) .split('&') .reduce((params, param) => { let [ key, value ] = param.split('='); params[key] = value ? decodeURIComponent(value.replace(/\+/g, ' ')) : ''; return params; }, { }); }; 

JQuery के बिना

 var qs = (function(a) { if (a == "") return {}; var b = {}; for (var i = 0; i < a.length; ++i) { var p=a[i].split('=', 2); if (p.length == 1) b[p[0]] = ""; else b[p[0]] = decodeURIComponent(p[1].replace(/\+/g, " ")); } return b; })(window.location.search.substr(1).split('&')); 

URL ?topic=123&name=query+string जैसी, निम्न के साथ वापस आ जाएगा:

 qs["topic"]; // 123 qs["name"]; // query string qs["nothere"]; // undefined (object) 

Google विधि

Google के कोड को getUrlParameters हुए मैंने उन तरीकों का उपयोग किया जो वे उपयोग करते हैं: getUrlParameters

 function (b) { var c = typeof b === "undefined"; if (a !== h && c) return a; for (var d = {}, b = b || k[B][vb], e = b[p]("?"), f = b[p]("#"), b = (f === -1 ? b[Ya](e + 1) : [b[Ya](e + 1, f - e - 1), "&", b[Ya](f + 1)][K](""))[z]("&"), e = i.dd ? ia : unescape, f = 0, g = b[w]; f < g; ++f) { var l = b[f][p]("="); if (l !== -1) { var q = b[f][I](0, l), l = b[f][I](l + 1), l = l[Ca](/\+/g, " "); try { d[q] = e(l) } catch (A) {} } } c && (a = d); return d } 

यह अस्पष्ट है, लेकिन यह समझ में आता है।

वे यूआरएल पर मापदंडों की तलाश शुरू करते हैं ? और भी हैश # फिर प्रत्येक पैरामीटर के लिए वे समान चिह्न b[f][p]("=") में विभाजित होते हैं (जो indexOf की तरह दिखते हैं, वे कुंजी / मान प्राप्त करने के लिए चारों की स्थिति का उपयोग करते हैं)। इसे विभाजित करने के बाद वे जांच करते हैं कि पैरामीटर में कोई मान है या नहीं, अगर इसके पास d के मान को संग्रहीत किया जाता है, तो यह अभी जारी नहीं है।

अंत में ऑब्जेक्ट d वापस आ गया है, एस्केपिंग और + साइन इन करें यह ऑब्जेक्ट मेरी तरह ही है, इसका एक ही व्यवहार है


एक jQuery प्लगइन के रूप में मेरी विधि

 (function($) { $.QueryString = (function(paramsArray) { let params = {}; for (let i = 0; i < paramsArray.length; ++i) { let param = paramsArray[i] .split('=', 2); if (param.length !== 2) continue; params[param[0]] = decodeURIComponent(param[1].replace(/\+/g, " ")); } return params; })(window.location.search.substr(1).split('&')) })(jQuery); 

प्रयोग

 //Get a param $.QueryString.param //-or- $.QueryString["param"] //This outputs something like... //"val" //Get all params as object $.QueryString //This outputs something like... //Object { param: "val", param2: "val" } //Set a param (only in the $.QueryString object, doesn't affect the browser's querystring) $.QueryString.param = "newvalue" //This doesn't output anything, it just updates the $.QueryString object //Convert object into string suitable for url a querystring (Requires jQuery) $.param($.QueryString) //This outputs something like... //"param=newvalue&param2=val" //Update the url/querystring in the browser's location bar with the $.QueryString object history.replaceState({}, '', "?" + $.param($.QueryString)); //-or- history.pushState({}, '', "?" + $.param($.QueryString)); 

प्रदर्शन परीक्षण (रेगेक्स विधि के खिलाफ विभाजन विधि) ( जेएसपीईआरएफ )

तैयारी कोड: विधियों घोषणा

स्प्लिट टेस्ट कोड

 var qs = window.GetQueryString(query); var search = qs["q"]; var value = qs["value"]; var undef = qs["undefinedstring"]; 

रेगेक्स टेस्ट कोड

 var search = window.getParameterByName("q"); var value = window.getParameterByName("value"); var undef = window.getParameterByName("undefinedstring"); 

Windows Server 2008 R2 / 7 x 64 पर फ़ायरफ़ॉक्स 4.0 x86 में परीक्षण

  • भाजित विधि : 144,780 ± 2.17% सबसे तेज़
  • रेगेक्स विधि : 13,891 ± 0.85% | 90% धीमी

आर्टेम बेर्गेर के जवाब का बेहतर संस्करण:

 function getParameterByName(name) { var match = RegExp('[?&]' + name + '=([^&]*)').exec(window.location.search); return match && decodeURIComponent(match[1].replace(/\+/g, ' ')); } 

सुधार के बारे में अधिक जानकारी के लिए देखें: http://james.padolsey.com/javascript/bujs-1-getparameterbyname/

सिर्फ एक और सिफारिश प्लगइन Purl , लंगर, होस्ट आदि सहित यूआरएल के सभी हिस्सों को पुनः प्राप्त करने की अनुमति देता है।

इसके साथ या बिना jQuery का उपयोग किया जा सकता है।

उपयोग बहुत सरल और शांत है:

 var url = $.url('http://allmarkedup.com/folder/dir/index.html?item=value'); // jQuery version var url = purl('http://allmarkedup.com/folder/dir/index.html?item=value'); // plain JS version url.attr('protocol'); // returns 'http' url.attr('path'); // returns '/folder/dir/index.html' 

हालांकि, 11 नवंबर, 2014 तक, Purl अब नहीं रखी गई है और लेखक इसके बजाय URI.js का उपयोग करने की सिफारिश करता है। JQuery के प्लगिन में यह अलग है कि यह तत्वों पर केंद्रित है – स्ट्रिंग के उपयोग के लिए, बस URI साथ या बिना jQuery के URI उपयोग करें। समान कोड इस तरह, फुलर डॉक्स के रूप में देखेंगे:

 var url = new URI('http://allmarkedup.com/folder/dir/index.html?item=value'); // plain JS version url.protocol(); // returns 'http' url.path(); // returns '/folder/dir/index.html' 

URLSearchParams

फ़ायरफ़ॉक्स 44+, ओपेरा 36+ और क्रोम 49 + यूआरएल खोजपारा एपीआई का समर्थन करते हैं:

  • क्रोम घोषणा और विवरण
  • ओपेरा घोषणा और विवरण
  • फ़ायरफ़ॉक्स घोषणा और विवरण

सफारी नाइटली ने इसे लागू किया है, और यह माइक्रोसॉफ्ट एज के लिए भी विकास में है। Safari, Edge, और IE के स्थिर संस्करणों के लिए Google- सुझाए गए URLSearchParams polyfill है

यह डब्लू 3 सी द्वारा मानकीकृत नहीं है, लेकिन यह WHOG द्वारा एक जीवित मानक है।

आप इसे स्थान पर उपयोग कर सकते हैं, लेकिन आपको इसे हटाने की आवश्यकता है ? प्रश्न चिह्न (उदाहरण के लिए, .slice(1) ):

 let params = new URLSearchParams(location.search.slice(1)); 

या

 let params = (new URL(location)).searchParams; 

या किसी भी URL पर निश्चित रूप से:

 let url = new URL('https://example.com?foo=1&bar=2'); let params = new URLSearchParams(url.search.slice(1)); 

तुम भी एक लघुकोड का उपयोग कर .searchParams प्राप्त कर सकते हैं। खोज वस्तु यूआरएल ऑब्जेक्ट पर संपत्ति, इस तरह:

 let params = new URL('https://example.com?foo=1&bar=2').searchParams; params.get('foo'); // "1" params.get('bar'); // "2" 

आप get(KEY) , set(KEY, VALUE) , append(KEY, VALUE) एपीआई के माध्यम से पढ़ / निर्धारित पैरामीटर आप सभी मूल्यों पर पुनरावृत्त भी कर सकते हैं for (let p of params) {}

एक संदर्भ क्रियान्वयन और एक नमूना पृष्ठ ऑडिटिंग और परीक्षण के लिए उपलब्ध है।

रोशनमॉ पर स्निपप्लर डॉट कॉम में एक सरल लिपि है, जिसे jQuery के साथ यूआरएल पैरामीटर में वर्णित किया गया है बेहतर अपनी स्क्रिप्ट के साथ आप आसानी से केवल उन मापदंडों को निकाल सकते हैं जो आप चाहते हैं।

ये सार है:

 $.urlParam = function(name, url) { if (!url) { url = window.location.href; } var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(url); if (!results) { return undefined; } return results[1] || undefined; } 

फिर बस अपने मापदंडों को क्वेरी स्ट्रिंग से प्राप्त करें।

इसलिए यदि यूआरएल / क्वेरी स्ट्रिंग xyz.com/index.html?lang=de

बस var langval = $.urlParam('lang'); कॉल करें var langval = $.urlParam('lang'); , और आपको मिल गया है।

UZBEKJON के पास इस पर एक महान ब्लॉग पोस्ट भी है, jQuery पैरामीटर और jQuery के साथ मूल्य प्राप्त करें

tl; डॉ

एक त्वरित, पूर्ण समाधान , जो बहुस्तरीय कुंजी और एन्कोडेड वर्णों को नियंत्रित करता है।

 var qd = {}; if (location.search) location.search.substr(1).split("&").forEach(function(item) {var s = item.split("="), k = s[0], v = s[1] && decodeURIComponent(s[1]); (qd[k] = qd[k] || []).push(v)}) //using ES6 (23 characters cooler) var qd = {}; if (location.search) location.search.substr(1).split`&`.forEach(item => {let [k,v] = item.split`=`; v = v && decodeURIComponent(v); (qd[k] = qd[k] || []).push(v)}) 

मल्टी लाइन:

 var qd = {}; if (location.search) location.search.substr(1).split("&").forEach(function(item) { var s = item.split("="), k = s[0], v = s[1] && decodeURIComponent(s[1]); // null-coalescing / short-circuit //(k in qd) ? qd[k].push(v) : qd[k] = [v] (qd[k] = qd[k] || []).push(v) // null-coalescing / short-circuit }) 

यह सब कोड क्या है …
"रिक-कोलेसिंगिंग" , शॉर्ट सर्किट मूल्यांकन
ES6 विध्वंस कार्य , एरो फ़ंक्शंस , टेम्पलेट स्ट्रिंग्स

उदाहरण:

 "?a=1&b=0&c=3&d&e&a=5&a=t%20e%20x%20t&e=http%3A%2F%2Fw3schools.com%2Fmy%20test.asp%3Fname%3Dståle%26car%3Dsaab" > qd a: ["1", "5", "text"] b: ["0"] c: ["3"] d: [undefined] e: [undefined, "http://w3schools.com/my test.asp?name=ståle&car=saab"] > qd.a[1] // "5" > qd["a"][1] // "5" 


और पढ़ें … वेनिला जावास्क्रिप्ट समाधान के बारे में

यूआरएल के उपयोग के अलग-अलग हिस्सों तक पहुंचने के लिए location.(search|hash)

आसान (डमी) समाधान

 var queryDict = {}; location.search.substr(1).split("&").forEach(function(item) {queryDict[item.split("=")[0]] = item.split("=")[1]}) 
  • खाली कुंजी को सही ढंग से संभालता है
  • अंतिम मान के साथ बहु-कुंजियाँ ओवरराइड की गईं
 "?a=1&b=0&c=3&d&e&a=5" > queryDict a: "5" b: "0" c: "3" d: undefined e: undefined 

बहु-मूल्य वाली कुंजियां

साधारण कुंजी जांच (item in dict) ? dict.item.push(val) : dict.item = [val] (item in dict) ? dict.item.push(val) : dict.item = [val]

 var qd = {}; location.search.substr(1).split("&").forEach(function(item) {(item.split("=")[0] in qd) ? qd[item.split("=")[0]].push(item.split("=")[1]) : qd[item.split("=")[0]] = [item.split("=")[1]]}) 
  • अब ऐरे के बदले बदले हैं
  • qd.key[index] या qd[key][index] द्वारा पहुँच मूल्य
 > qd a: ["1", "5"] b: ["0"] c: ["3"] d: [undefined] e: [undefined] 

एन्कोडेड वर्ण?

दूसरे या दोनों विभाजन के लिए decodeURIComponent() उपयोग करें।

 var qd = {}; location.search.substr(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]}) 

उदाहरण:

 "?a=1&b=0&c=3&d&e&a=5&a=t%20e%20x%20t&e=http%3A%2F%2Fw3schools.com%2Fmy%20test.asp%3Fname%3Dståle%26car%3Dsaab" > qd a: ["1", "5", "text"] b: ["0"] c: ["3"] d: ["undefined"] // decodeURIComponent(undefined) returns "undefined" !!!* e: ["undefined", "http://w3schools.com/my test.asp?name=ståle&car=saab"] 


टिप्पणियों से

* !!! कृपया ध्यान दें, कि decodeURIComponent(undefined) स्ट्रिंग "undefined" देता है समाधान decodeURIComponent() का एक सरल उपयोग में निहित है, जो यह सुनिश्चित करता है कि decodeURIComponent() को अपरिभाषित मानों पर नहीं बुलाया जाता है। (शीर्ष पर "पूरा समाधान" देखें।)

 v = v && decodeURIComponent(v); 

यदि क्वेरी स्ट्रिंग खाली है ( location.search == "" ), परिणाम कुछ गुमराह करना है qd == {"": undefined} । पार्सिंग फ़ंक्शन को लॉन्च करने से पहले क्वेरी स्ट्रिंग की जांच करने के लिए सुझाव दिया गया है:

 if (location.search) location.search.substr(1).split("&").forEach(...) 

यदि आप jQuery का उपयोग कर रहे हैं, तो आप एक पुस्तकालय का उपयोग कर सकते हैं, जैसे कि jQuery BBQ: बैक बटन और क्वेरी लाइब्रेरी ।

… jQuery के BBQ एक पूर्ण .deparam() विधि प्रदान करता है, दोनों हैश राज्य प्रबंधन के साथ, और टुकड़ा / क्वेरी स्ट्रिंग पार्स और उपयोगिता विधियों को मर्ज करें।

संपादित करें: Deparam उदाहरण जोड़ना:

  var DeparamExample = function() { var params = $.deparam.querystring(); //nameofparam is the name of a param from url //code below will get param if ajax refresh with hash if (typeof params.nameofparam == 'undefined') { params = jQuery.deparam.fragment(window.location.href); } if (typeof params.nameofparam != 'undefined') { var paramValue = params.nameofparam.toString(); } }; 

एंडी ई के पूर्ण समाधान वाले jQuery प्लगइन में उत्कृष्ट समाधान बनाने के लिए यहां मेरा चाकू है:

 ;(function ($) { $.extend({ getQueryString: function (name) { function parseParams() { var params = {}, e, a = /\+/g, // Regex for replacing addition symbol with a space r = /([^&=]+)=?([^&]*)/g, d = function (s) { return decodeURIComponent(s.replace(a, " ")); }, q = window.location.search.substring(1); while (e = r.exec(q)) params[d(e[1])] = d(e[2]); return params; } if (!this.queryStringParams) this.queryStringParams = parseParams(); return this.queryStringParams[name]; } }); })(jQuery); 

सिंटैक्स है:

 var someVar = $.getQueryString('myParam'); 

दोनों ओर से लाभदायक!

बस दो विभाजन का उपयोग करें:

 function get(n) { var half = location.search.split(n + '=')[1]; return half !== undefined ? decodeURIComponent(half.split('&')[0]) : null; } 

मैं सभी पिछले और अधिक पूर्ण उत्तर पढ़ रहा था। लेकिन मुझे लगता है कि यह सरल और तेज़ तरीका है। आप इस jsPerf बेंचमार्क में जांच कर सकते हैं

रुप की टिप्पणी में समस्या को हल करने के लिए, नीचे दो पंक्तियों में पहली पंक्ति को बदलकर एक सशर्त विभाजन जोड़ें। लेकिन पूर्ण सटीकता का मतलब है कि अब regexp की तुलना में धीमी है ( jsPerf देखें)।

 function get(n) { var half = location.search.split('&' + n + '=')[1]; if (!half) half = location.search.split('?' + n + '=')[1]; return half !== undefined ? decodeURIComponent(half.split('&')[0]) : null; } 

इसलिए यदि आप जानते हैं कि आप रुपये के प्रति-मामले में नहीं चलेगे, तो यह जीत अन्यथा, regexp

या यदि आपके पास क्वेरी स्ट्रिंग पर नियंत्रण है और गारंटी दे सकता है कि जिस मान को आप प्राप्त करने का प्रयास कर रहे हैं वह कभी भी किसी भी एन्कोडेड वर्णों को नहीं रखेगा (एक मान में यह एक बुरा विचार होगा) – आप निम्न थोड़ा अधिक सरल और पठनीय संस्करण का उपयोग कर सकते हैं पहला विकल्प:

  function getQueryStringValueByName(name) { var queryStringFromStartOfValue = location.search.split(name + '=')[1]; return queryStringFromStartOfValue !== undefined ? queryStringFromStartOfValue.split('&')[0] : null; 

यदि आप क्वेरी स्ट्रिंग को पार्स करने के बजाय अधिक URL हेरफेर कर रहे हैं, तो आपको URI.js उपयोगी मिल सकता है यह यूआरएल छेड़छाड़ करने के लिए एक लाइब्रेरी है – और सभी घंटी और सीटी के साथ आता है। (आत्म-विज्ञापन के लिए यहां खेद है)

अपने क्वेरीस्ट्रिंग को मानचित्र में कनवर्ट करने के लिए:

 var data = URI('?foo=bar&bar=baz&foo=world').query(true); data == { "foo": ["bar", "world"], "bar": "baz" } 

(यूआरआई.जेएस भी "फिक्सेस" खराब क्वेरीस्ट्रिंग जैसे ?&foo&&bar=baz& एंडैब ?&foo&&bar=baz& टू ?foo&bar=baz )

मुझे रयान भेलन के समाधान पसंद है I लेकिन मैं उस के लिए jQuery का विस्तार करने का कोई बिंदु नहीं देखता हूं? JQuery कार्यक्षमता का कोई उपयोग नहीं है।

दूसरी ओर मुझे Google Chrome में अंतर्निहित फ़ंक्शन पसंद है: window.location.getParameter

तो क्यों नहीं इसका इस्तेमाल करें? ठीक है, अन्य ब्राउज़रों में नहीं है तो चलो यह फ़ंक्शन बनाते हैं यदि यह मौजूद नहीं है:

 if (!window.location.getParameter ) { window.location.getParameter = function(key) { function parseParams() { var params = {}, e, a = /\+/g, // Regex for replacing addition symbol with a space r = /([^&=]+)=?([^&]*)/g, d = function (s) { return decodeURIComponent(s.replace(a, " ")); }, q = window.location.search.substring(1); while (e = r.exec(q)) params[d(e[1])] = d(e[2]); return params; } if (!this.queryStringParams) this.queryStringParams = parseParams(); return this.queryStringParams[key]; }; } 

यह समारोह रयान भेलन से अधिक या कम है, लेकिन यह अलग तरीके से लिपटे है: स्पष्ट नाम और अन्य जावास्क्रिप्ट पुस्तकालयों की कोई निर्भरता नहीं है। मेरे ब्लॉग पर इस समारोह के बारे में अधिक जानकारी

PHP $ _GET सरणी के समान वस्तु प्राप्त करने का एक तेज़ तरीका है:

 function get_query(){ var url = location.search; var qs = url.substring(url.indexOf('?') + 1).split('&'); for(var i = 0, result = {}; i < qs.length; i++){ qs[i] = qs[i].split('='); result[qs[i][0]] = decodeURIComponent(qs[i][1]); } return result; } 

उपयोग:

 var $_GET = get_query(); 

क्वेरी स्ट्रिंग के लिए x=5&y&z=hello&x=6 यह ऑब्जेक्ट देता है:

 { x: "6", y: undefined, z: "hello" } 

यह सादे जावास्क्रिप्ट कोड में सरल रखें:

 function qs(key) { var vars = [], hash; var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&'); for(var i = 0; i < hashes.length; i++) { hash = hashes[i].split('='); vars.push(hash[0]); vars[hash[0]] = hash[1]; } return vars[key]; } 

इसे जावास्क्रिप्ट कोड में कहीं से भी कॉल करें:

 var result = qs('someKey'); 

ये सभी महान जवाब हैं, लेकिन मुझे कुछ और मजबूत करने की ज़रूरत है, और सोचा कि आप सभी को मैंने जो भी बनाया है, उसे पसंद कर सकते हैं।

यह एक सरल लाइब्रेरी विधि है जो यूआरएल मापदंडों के विच्छेदन और हेरफेर करता है। स्थैतिक विधि में निम्न उप पद्धतियाँ हैं जिन्हें विषय URL पर कहा जा सकता है:

  • getHost
  • getPath
  • getHash
  • setHash
  • getParams
  • getQuery
  • setParam
  • getParam
  • hasParam
  • removeParam

उदाहरण:

 URLParser(url).getParam('myparam1') 

 var url = "http://www.test.com/folder/mypage.html?myparam1=1&myparam2=2#something"; function URLParser(u){ var path="",query="",hash="",params; if(u.indexOf("#") > 0){ hash = u.substr(u.indexOf("#") + 1); u = u.substr(0 , u.indexOf("#")); } if(u.indexOf("?") > 0){ path = u.substr(0 , u.indexOf("?")); query = u.substr(u.indexOf("?") + 1); params= query.split('&'); }else path = u; return { getHost: function(){ var hostexp = /\/\/([\w.-]*)/; var match = hostexp.exec(path); if (match != null && match.length > 1) return match[1]; return ""; }, getPath: function(){ var pathexp = /\/\/[\w.-]*(?:\/([^?]*))/; var match = pathexp.exec(path); if (match != null && match.length > 1) return match[1]; return ""; }, getHash: function(){ return hash; }, getParams: function(){ return params }, getQuery: function(){ return query; }, setHash: function(value){ if(query.length > 0) query = "?" + query; if(value.length > 0) query = query + "#" + value; return path + query; }, setParam: function(name, value){ if(!params){ params= new Array(); } params.push(name + '=' + value); for (var i = 0; i < params.length; i++) { if(query.length > 0) query += "&"; query += params[i]; } if(query.length > 0) query = "?" + query; if(hash.length > 0) query = query + "#" + hash; return path + query; }, getParam: function(name){ if(params){ for (var i = 0; i < params.length; i++) { var pair = params[i].split('='); if (decodeURIComponent(pair[0]) == name) return decodeURIComponent(pair[1]); } } console.log('Query variable %s not found', name); }, hasParam: function(name){ if(params){ for (var i = 0; i < params.length; i++) { var pair = params[i].split('='); if (decodeURIComponent(pair[0]) == name) return true; } } console.log('Query variable %s not found', name); }, removeParam: function(name){ query = ""; if(params){ var newparams = new Array(); for (var i = 0;i < params.length;i++) { var pair = params[i].split('='); if (decodeURIComponent(pair[0]) != name) newparams .push(params[i]); } params = newparams; for (var i = 0; i < params.length; i++) { if(query.length > 0) query += "&"; query += params[i]; } } if(query.length > 0) query = "?" + query; if(hash.length > 0) query = query + "#" + hash; return path + query; }, } } document.write("Host: " + URLParser(url).getHost() + '<br>'); document.write("Path: " + URLParser(url).getPath() + '<br>'); document.write("Query: " + URLParser(url).getQuery() + '<br>'); document.write("Hash: " + URLParser(url).getHash() + '<br>'); document.write("Params Array: " + URLParser(url).getParams() + '<br>'); document.write("Param: " + URLParser(url).getParam('myparam1') + '<br>'); document.write("Has Param: " + URLParser(url).hasParam('myparam1') + '<br>'); document.write(url + '<br>'); // Remove the first parameter url = URLParser(url).removeParam('myparam1'); document.write(url + ' - Remove the first parameter<br>'); // Add a third parameter url = URLParser(url).setParam('myparam3',3); document.write(url + ' - Add a third parameter<br>'); // Remove the second parameter url = URLParser(url).removeParam('myparam2'); document.write(url + ' - Remove the second parameter<br>'); // Add a hash url = URLParser(url).setHash('newhash'); document.write(url + ' - Set Hash<br>'); // Remove the last parameter url = URLParser(url).removeParam('myparam3'); document.write(url + ' - Remove the last parameter<br>'); // Remove a parameter that doesn't exist url = URLParser(url).removeParam('myparam3'); document.write(url + ' - Remove a parameter that doesn\"t exist<br>'); 

From the MDN :

 function loadPageVar (sVar) {  return unescape(window.location.search.replace(new RegExp("^(?:.*[&\\?]" + escape(sVar).replace(/[\.\+\*]/g, "\\$&") + "(?:\\=([^&]*))?)?.*$", "i"), "$1")); } alert(loadPageVar("name")); 

I use regular expressions a lot, but not for that.

It seems easier and more efficient to me to read the query string once in my application, and build an object from all the key/value pairs like:

 var search = function() { var s = window.location.search.substr(1), p = s.split(/\&/), l = p.length, kv, r = {}; if (l === 0) {return false;} while (l--) { kv = p[l].split(/\=/); r[kv[0]] = decodeURIComponent(kv[1] || '') || true; } return r; }(); 

For a URL like http://domain.com?param1=val1&param2=val2 you can get their value later in your code as search.param1 and search.param2 .

Code golf:

 var a = location.search&&location.search.substr(1).replace(/\+/gi," ").split("&"); for (var i in a) { var s = a[i].split("="); a[i] = a[unescape(s[0])] = unescape(s[1]); } 

Display it!

 for (i in a) { document.write(i + ":" + a[i] + "<br/>"); }; 

On my Mac: test.htm?i=can&has=cheezburger displays

 0:can 1:cheezburger i:can has:cheezburger 
 function GET() { var data = []; for(x = 0; x < arguments.length; ++x) data.push(location.href.match(new RegExp("/\?".concat(arguments[x],"=","([^\n&]*)")))[1]) return data; } example: data = GET("id","name","foo"); query string : ?id=3&name=jet&foo=b returns: data[0] // 3 data[1] // jet data[2] // b or alert(GET("id")[0]) // return 3 

Roshambo jQuery method wasn't taking care of decode URL

http://snipplr.com/view/26662/get-url-parameters-with-jquery–improved/

Just added that capability also while adding in the return statement

 return decodeURIComponent(results[1].replace(/\+/g, " ")) || 0; 

Now you can find the updated gist:

 $.urlParam = function(name){ var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href); if (!results) { return 0; } return decodeURIComponent(results[1].replace(/\+/g, " ")) || 0; } 

I like this one (taken from jquery-howto.blogspot.co.uk):

 // get an array with all querystring values // example: var valor = getUrlVars()["valor"]; function getUrlVars() { var vars = [], hash; var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&'); for (var i = 0; i < hashes.length; i++) { hash = hashes[i].split('='); vars.push(hash[0]); vars[hash[0]] = hash[1]; } return vars; } 

Works great for me.

Here's my edit to this excellent answer – with added ability to parse query strings with keys without values.

 var url = 'http://sb.com/reg/step1?param'; var qs = (function(a) { if (a == "") return {}; var b = {}; for (var i = 0; i < a.length; ++i) { var p=a[i].split('=', 2); if (p[1]) p[1] = decodeURIComponent(p[1].replace(/\+/g, " ")); b[p[0]] = p[1]; } return b; })((url.split('?'))[1].split('&')); 

IMPORTANT! The parameter for that function in the last line is different. It's just an example of how one can pass an arbitrary URL to it. You can use last line from Bruno's answer to parse the current URL.

So what exactly changed? With url http://sb.com/reg/step1?param= results will be same. But with url http://sb.com/reg/step1?param Bruno's solution returns an object without keys, while mine returns an object with key param and undefined value.

I needed an object from the query string, and I hate lots of code. It may not be the most robust in the universe, but it's just a few lines of code.

 var q = {}; location.href.split('?')[1].split('&').forEach(function(i){ q[i.split('=')[0]]=i.split('=')[1]; }); 

A URL like this.htm?hello=world&foo=bar will create:

 {hello:'world', foo:'bar'} 

This is a function I created a while back and I'm quite happy with. It is not case sensitive – which is handy. Also, if the requested QS doesn't exist, it just returns an empty string.

I use a compressed version of this. I'm posting uncompressed for the novice types to better explain what's going on.

I'm sure this could be optimized or done differently to work faster, but it's always worked great for what I need.

Enjoy.

 function getQSP(sName, sURL) { var theItmToRtn = ""; var theSrchStrg = location.search; if (sURL) theSrchStrg = sURL; var sOrig = theSrchStrg; theSrchStrg = theSrchStrg.toUpperCase(); sName = sName.toUpperCase(); theSrchStrg = theSrchStrg.replace("?", "&") theSrchStrg = theSrchStrg + "&"; var theSrchToken = "&" + sName + "="; if (theSrchStrg.indexOf(theSrchToken) != -1) { var theSrchTokenLth = theSrchToken.length; var theSrchTokenLocStart = theSrchStrg.indexOf(theSrchToken) + theSrchTokenLth; var theLocOfNextAndSign = theSrchStrg.indexOf("&", theSrchTokenLocStart); theItmToRtn = unescape(sOrig.substring(theSrchTokenLocStart, theLocOfNextAndSign)); } return unescape(theItmToRtn); } 

Here's an extended version of Andy E's linked "Handle array-style query strings"-version. Fixed a bug ( ?key=1&key[]=2&key[]=3 ; 1 is lost and replaced with [2,3] ), made a few minor performance improvements (re-decoding of values, recalculating "[" position, etc.) and added a number of improvements (functionalized, support for ?key=1&key=2 , support for ; delimiters). I left the variables annoyingly short, but added comments galore to make them readable (oh, and I reused v within the local functions, sorry if that is confusing ;).

It will handle the following querystring…

?test=Hello&person=neek&person[]=jeff&person[]=jim&person[extra]=john&test3&nocache=1398914891264

…making it into an object that looks like…

 { "test": "Hello", "person": { "0": "neek", "1": "jeff", "2": "jim", "length": 3, "extra": "john" }, "test3": "", "nocache": "1398914891264" } 

As you can see above, this version handles some measure of "malformed" arrays, ie – person=neek&person[]=jeff&person[]=jim or person=neek&person=jeff&person=jim as the key is identifiable and valid (at least in dotNet's NameValueCollection.Add ):

If the specified key already exists in the target NameValueCollection instance, the specified value is added to the existing comma-separated list of values in the form "value1,value2,value3".

It seems the jury is somewhat out on repeated keys as there is no spec. In this case, multiple keys are stored as an (fake)array. But do note that I do not process values based on commas into arrays.

The code:

 getQueryStringKey = function(key) { return getQueryStringAsObject()[key]; }; getQueryStringAsObject = function() { var b, cv, e, k, ma, sk, v, r = {}, d = function (v) { return decodeURIComponent(v).replace(/\+/g, " "); }, //# d(ecode) the v(alue) q = window.location.search.substring(1), //# suggested: q = decodeURIComponent(window.location.search.substring(1)), s = /([^&;=]+)=?([^&;]*)/g //# original regex that does not allow for ; as a delimiter: /([^&=]+)=?([^&]*)/g ; //# ma(make array) out of the v(alue) ma = function(v) { //# If the passed v(alue) hasn't been setup as an object if (typeof v != "object") { //# Grab the cv(current value) then setup the v(alue) as an object cv = v; v = {}; v.length = 0; //# If there was a cv(current value), .push it into the new v(alue)'s array //# NOTE: This may or may not be 100% logical to do... but it's better than loosing the original value if (cv) { Array.prototype.push.call(v, cv); } } return v; }; //# While we still have key-value e(ntries) from the q(uerystring) via the s(earch regex)... while (e = s.exec(q)) { //# while((e = s.exec(q)) !== null) { //# Collect the open b(racket) location (if any) then set the d(ecoded) v(alue) from the above split key-value e(ntry) b = e[1].indexOf("["); v = d(e[2]); //# As long as this is NOT a hash[]-style key-value e(ntry) if (b < 0) { //# b == "-1" //# d(ecode) the simple k(ey) k = d(e[1]); //# If the k(ey) already exists if (r[k]) { //# ma(make array) out of the k(ey) then .push the v(alue) into the k(ey)'s array in the r(eturn value) r[k] = ma(r[k]); Array.prototype.push.call(r[k], v); } //# Else this is a new k(ey), so just add the k(ey)/v(alue) into the r(eturn value) else { r[k] = v; } } //# Else we've got ourselves a hash[]-style key-value e(ntry) else { //# Collect the d(ecoded) k(ey) and the d(ecoded) sk(sub-key) based on the b(racket) locations k = d(e[1].slice(0, b)); sk = d(e[1].slice(b + 1, e[1].indexOf("]", b))); //# ma(make array) out of the k(ey) r[k] = ma(r[k]); //# If we have a sk(sub-key), plug the v(alue) into it if (sk) { r[k][sk] = v; } //# Else .push the v(alue) into the k(ey)'s array else { Array.prototype.push.call(r[k], v); } } } //# Return the r(eturn value) return r; }; 

We've just released arg.js , a project aimed at solving this problem once and for all. It's traditionally been so difficult but now you can do:

 var name = Arg.get("name"); 

or getting the whole lot:

 var params = Arg.all(); 

and if you care about the difference between ?query=true and #hash=true then you can use the Arg.query() and Arg.hash() methods.

The problem with the top answer on that question is that it's not-supported parameters placed after #, but sometimes it's needed to get this value also.

I modified the answer to let it parse a full query string with a hash sign also:

 var getQueryStringData = function(name) { var result = null; var regexS = "[\\?&#]" + name + "=([^&#]*)"; var regex = new RegExp(regexS); var results = regex.exec('?' + window.location.href.split('?')[1]); if (results != null) { result = decodeURIComponent(results[1].replace(/\+/g, " ")); } return result; }; 
 function GetQueryStringParams(sParam) { var sPageURL = window.location.search.substring(1); var sURLVariables = sPageURL.split('&'); for (var i = 0; i < sURLVariables.length; i++) { var sParameterName = sURLVariables[i].split('='); if (sParameterName[0] == sParam) { return sParameterName[1]; } } }​ 

And this is how you can use this function assuming the URL is

http://dummy.com/?stringtext=jquery&stringword=jquerybyexample

 var tech = GetQueryStringParams('stringtext'); var blog = GetQueryStringParams('stringword'); 

I developed a small library using techniques listed here to create an easy to use, drop-in solution to anyones troubles; It can be found here:

https://github.com/Nijikokun/query-js

प्रयोग

Fetching specific parameter/key:

 query.get('param'); 

Using the builder to fetch the entire object:

 var storage = query.build(); console.log(storage.param); 

and tons more… check the github link for more examples.

विशेषताएं

  1. Caching on both decoding and parameters
  2. Supports hash query strings #hello?page=3
  3. Supports passing custom queries
  4. Supports Array / Object Parameters user[]="jim"&user[]="bob"
  5. Supports empty management &&
  6. Supports declaration parameters without values name&hello="world"
  7. Supports repeated parameters param=1&param=2
  8. Clean, compact, and readable source 4kb
  9. AMD, Require, Node support