2014-04-09 10 views
5

मैं यूआरएल क्वेरी स्ट्रिंग से कुछ पैरामीटर हटाने की कोशिश कर रहा हूं।यूआरएल क्वेरी से पैरामीटर कैसे निकालें?

मैं मानकों की एक सरणी हटाया जा करने के लिए है:

var queryParamsToRemove = ['destination','formName']; 

मैं क्या करने की कोशिश कर रहा था, यूआरएल में प्रत्येक पैरामीटर के लिए खोज है, और एक RegExp उपयोग करके उसे निकाल। कुछ ऐसा:

for (param in queryParamsToRemove){ 
    patt = new RegExp(param,'g'); 
    queryString = queryString.replace('&' + patt + '=' + /*?=&/g,''); 
} 

लेकिन यह वाक्यविन्यास समस्याओं के कारण काम नहीं करता है, मुझे लगता है।

for (param in queryParamsToRemove){ 
    queryString = queryString.replace(new RegExp('[&\?]' + queryParamsToRemove[param] + '=.*(&?)', 'g'), '\1'); 
} 

यही काम करना चाहिए:

उत्तर

0

अपने असली असली सवाल का जवाब करने के लिए।

अन्यथा आप इस तरह के फ़ंक्शन का उपयोग कर सकते हैं: The $.param() inverse function in JavaScript/jQuery (फ़ंक्शन नाम से jQuery हटाएं और आप इसे किसी भी लाइब्रेरी के बिना उपयोग कर सकते हैं)।

कुछ इस तरह:

unparam = function (value) { 
    var 
    // Object that holds names => values. 
    params = [], 
    // Get query string pieces (separated by &) 
    pieces = value.split('&'), 
    // Temporary variables used in loop. 
    pair, i, l; 

    // Loop through query string pieces and assign params. 
    for (i = 0, l = pieces.length; i < l; i++) { 
     pair = pieces[i].split('=', 2); 
     // Repeated parameters with the same name are overwritten. Parameters 
     // with no value get set to boolean true. 
     params[decodeURIComponent(pair[0])] = (pair.length == 2 ? 
      decodeURIComponent(pair[1].replace(/\+/g, ' ')) : true); 
    } 

    return params; 
}; 

var query = unparam(querystr); 
for(var i in queryParamsToRemove) { 
    delete query[queryParamsToRemove[i]]; 
} 

एक सरणी में क्वेरी स्ट्रिंग टर्निंग, और वहाँ से आप अपने मूल्यों को हटा दें और इसे वापस कन्वर्ट एक क्वेरी स्ट्रिंग कर सकते हैं। यदि आप jQuery का उपयोग करते हैं तो आप jQuery.param()

का उपयोग कर सकते हैं अन्यथा इसे अपना स्वयं का फ़ंक्शन बनाने में बहुत मुश्किल नहीं होनी चाहिए।

अब एक स्ट्रिंग में क्वेरी सरणी परिवर्तित करने के लिए हम क्या कर सकते हैं:

reparam = function (queryArray) { 
    var res = []; 

    for(var i in queryArray) { 
     res.push(i + "=" + queryArray[i]); 
    } 

    return res.join('&'); 
} 

var queryString = reparam(query); 
+0

उस उत्तर के लिए आपको बहुत बहुत धन्यवाद। एक बात - पहला छोटा हिस्सा कुंजी को ठीक से हटा देता है, लेकिन मानों को जगह में रखता है। यदि इसे संशोधित करना संभव है तो यह मूल्यों को भी हटा देता है और उस साधारण कार्य के लिए लंबे कोडिंग से बचता है ... :) – yogev

+0

यदि आप रेगेक्स की बात करते हैं, तो जैसा कि मैंने कहा था कि यह सबसे अच्छा और केवल विचार नहीं था मूल्य के लिए अक्षर ... आपको मानों को सही ढंग से पहचानने के लिए रेगेक्स को संशोधित करने की आवश्यकता होगी (जो कि एक जटिल कार्य हो सकता है, जब तक कि आप नेट पर इसके लिए एक तैयार रेगेक्स नहीं पाते) – Colandus

+0

मेरी क्वेरी स्ट्रिंग है: formGeneratorNative.php? 1 = 1 और चौड़ाई = 1920 और ऊंचाई = 9 7 9 और डिवाइस = टैबलेट और isEmulator = झूठी और डिवाइस श्रेणी = 3 और गंतव्य = lobbyWrapper.php और formName = लॉगिन तो मान वास्तव में शब्द हैं।मुझे समझ में नहीं आता कि क्यों हटाया नहीं जा रहा है ... – yogev

1

यहाँ एक समारोह है कि मैं अक्सर अपनी परियोजनाओं में उपयोग है, यह आप सभी एक साहचर्य सरणी में पैरामीटर प्राप्त लाने के लिए अनुमति देता है:

function urlGet() 
{ 
    var t = location.search.substring(1).split('&'); 
    var f = new Object(); 
    for (var i = 0; i < t.length; i++) 
    { 
     var x = t[i].split('='); 
     f[x[0]] = x[1]; 
    } 
    return f; 
} 

आप सभी पैरामीटर प्राप्त करने के लिए इस फ़ंक्शन का उपयोग कर सकते हैं और फिर उन पैरामीटर को हटा सकते हैं जिन्हें आप delete विधि से नहीं चाहते हैं।

var parameters = urlGet(); 
delete parameters.destination; 
delete parameters.formName; 

अब आपको बस एक नई क्वेरी स्ट्रिंग बनाना है।

var query = '?'; 

for (var prop in parameters) 
{ 
    query += prop + '=' + parameters[prop] + '&'; 
}; 

query = query.substr(0, query.length - 1); 

अब, इसे अपने मूल यूआरएल में जोड़ें और आप कर चुके हैं!

+0

आपको बहुत बहुत धन्यवाद । लेकिन यह लाइन में एक त्रुटि फेंकता है: पैरामीटर.splice ('गंतव्य', 1); कह रही: "वस्तु # कोई विधि 'जोड़' पैरामीटर ठीक पार्स किया जा रहा है, btw – yogev

+0

मैं अपने जवाब संपादित कर लिया है, तो आप' वस्तुओं के साथ delete' विधि का उपयोग करना चाहिए ब्याह सांख्यिक सरणियों के लिए ही है – Sebj

+0

@।। सेबज यह ठीक से इस तरह से शामिल नहीं होगा। आपको कुंजी और मूल्य के बीच '=' के साथ इसमें शामिल होना चाहिए। – Colandus

0

ठीक है, कुछ ऐसा काम करता है जो काम करता है!

for (param in queryParamsToRemove) { 
    queryString = queryString.replace(new RegExp('&(' + queryParamsToRemove[param] + '=)+((\w)*(.)*)*&', 'g'), '&'); 
} 
+0

यह तब काम नहीं करेगा जब परम को हटाने के अंत में क्वेरी स्ट्रिंग (या शुरुआत)। जैसा कि आपके उदाहरण में है, फॉर्म नाम हटाया नहीं जाएगा। मैं अपना जवाब अपडेट करूंगा, इसे जांचूंगा। – Colandus

+0

यह वास्तव में काम करता है ... :) एक्स * एक खाली स्ट्रिंग भी हो सकता है साथ ही – yogev

+0

यहां देखें , यह काम नहीं करता है: http://jsfiddle.net/d9K7L/2/ formName को हटाया नहीं जाएगा क्योंकि यह एल है एक पत्थर। इसके अलावा यदि यह पहला था, वही वहां (यही कारण है कि आपको क्वेरी स्ट्रिंग में फ़ाइल नाम का उपयोग नहीं करना चाहिए)। "गंतव्य" के बाद भी जो कुछ भी आता है उसे भी हटा दिया जाता है। – Colandus

संबंधित मुद्दे