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


127

नियमित अभिव्यक्ति का उपयोग करके मानक जावास्क्रिप्ट में एक URL स्ट्रिंग में एक क्वेरी स्ट्रिंग से एक पैरामीटर को हटाने के लिए बेहतर तरीका है?

यहाँ मैं अब तक के साथ आया हूँ जो मेरे परीक्षणों में काम आता है, लेकिन मैं क्वेरिस्ट्रिंग पार्सिंग को फिर से बनाना पसंद नहीं करता!

function RemoveParameterFromUrl( url, parameter ) {

    if( typeof parameter == "undefined" || parameter == null || parameter == "" ) throw new Error( "parameter is required" );

    url = url.replace( new RegExp( "\\b" + parameter + "=[^&;]+[&;]?", "gi" ), "" ); "$1" );

    // remove any leftover crud
    url = url.replace( /[&;]$/, "" );

    return url;
}

जवाबों:


178
"[&;]?" + parameter + "=[^&;]+"

खतरनाक लगता है क्योंकि यह पैरामीटर 'बार' से मेल खाएगा:

?a=b&foobar=c

इसके अलावा, यदि parameterRegExp में कोई विशेष वर्ण, जैसे ''। और यह एक वैश्विक रेगेक्स नहीं है, इसलिए यह केवल पैरामीटर के एक उदाहरण को हटा देगा।

मैं इसके लिए एक साधारण RegExp का उपयोग नहीं करता, मैं उन मापदंडों को पार्स करूंगा और जिन्हें आप नहीं चाहते हैं उन्हें खो देंगे।

function removeURLParameter(url, parameter) {
    //prefer to use l.search if you have a location/link object
    var urlparts = url.split('?');   
    if (urlparts.length >= 2) {

        var prefix = encodeURIComponent(parameter) + '=';
        var pars = urlparts[1].split(/[&;]/g);

        //reverse iteration as may be destructive
        for (var i = pars.length; i-- > 0;) {    
            //idiom for string.startsWith
            if (pars[i].lastIndexOf(prefix, 0) !== -1) {  
                pars.splice(i, 1);
            }
        }

        return urlparts[0] + (pars.length > 0 ? '?' + pars.join('&') : '');
    }
    return url;
}

फ़ॉबर से मेल खाते बार के बारे में अच्छी बात। मैं एक की आवश्यकता करने के लिए अपने मूल regex अद्यतन किया है? या [[?] शुरुआत में। इस पर विचार करने के लिए अपने समाधान पर भी पढ़ें ...
मैथ्यू लॉक

5
यदि आप "से छुटकारा पाना चाहते हैं?" जब हटाने के बाद कोई पैरामीटर नहीं है, तो एक शर्त जोड़ें अगर pars.length == 0 का परीक्षण करने के लिए, और यदि यह 0 है, तो "url = urlparts [0]" को "जोड़ने के बजाय"?
१२:४२ पर जॉनमोक्ली

2
क्या यह सुरक्षित है कि एनकोडरिकॉमप्लांट (पैरामीटर) के साथ यूआरएल के टुकड़े की तुलना की जाए? यदि URL पैरामीटर नाम को अलग तरीके से एनकोड करता है तो क्या होगा? उदाहरण के लिए 'दो% 20words' बनाम 'दो + शब्द'। इससे निपटने के लिए, पैरामीटर नाम को डिकोड करना और सामान्य स्ट्रिंग के रूप में तुलना करना बेहतर हो सकता है।
एड्रियन प्रोक

9
हल्का सुधार, ताकि जब अंतिम URL पैरामीटर हटा दिया जाए, '?' भी हटा दिया जाता है: लाइन url= urlparts[0]+'?'+pars.join('&');कोurl= urlparts[0] + (pars.length > 0 ? '?' + pars.join('&') : "");
कोडी एस में

2
@ ktutnik / @ JonasAxelsson URL क्वेरी पैरामीटर स्वाभाविक रूप से केस-असंवेदनशील नहीं हैं।
बोबिन्स

30

आधुनिक ब्राउज़रURLSearchParams खोज पार्म्स के साथ काम करने के लिए इंटरफ़ेस प्रदान करते हैं । जो हैdelete विधि है जो नाम से परम को हटाती है।

if (typeof URLSearchParams !== 'undefined') {
  const params = new URLSearchParams('param1=1&param2=2&param3=3')
  
  console.log(params.toString())
  
  params.delete('param2')
  
  console.log(params.toString())

} else {
  console.log(`Your browser ${navigator.appVersion} does not support URLSearchParams`)
}


2
ध्यान दें कि URLSearchParamsIE, एज 16 और iOS 10.2 सफारी द्वारा समर्थित नहीं है। (रेफरी: caniuse.com/#feat=urlsearchparams )
khiav reoy

3
@khiavreoy हाँ। जैसे उत्तर में पहले दो शब्द एक ही लिंक देते हैं :)
यूरी तारबैंको

23

बॉबिन उत्तर से कॉपी किया गया, लेकिन यह क्वेरी स्ट्रिंग में प्रश्न चिह्नों का समर्थन करता है, जैसे

http://www.google.com/search?q=test???+something&aq=f

क्या किसी URL में एक से अधिक प्रश्न चिह्न होना मान्य है?

function removeUrlParameter(url, parameter) {
  var urlParts = url.split('?');

  if (urlParts.length >= 2) {
    // Get first part, and remove from array
    var urlBase = urlParts.shift();

    // Join it back up
    var queryString = urlParts.join('?');

    var prefix = encodeURIComponent(parameter) + '=';
    var parts = queryString.split(/[&;]/g);

    // Reverse iteration as may be destructive
    for (var i = parts.length; i-- > 0; ) {
      // Idiom for string.startsWith
      if (parts[i].lastIndexOf(prefix, 0) !== -1) {
        parts.splice(i, 1);
      }
    }

    url = urlBase + '?' + parts.join('&');
  }

  return url;
}

2
मेरा मानना ​​है ???कि अमान्य सिंटैक्स है और URL` में कभी नहीं होना चाहिए।

@torazaburo ने मेरे द्वारा पोस्ट किए गए स्टैकओवरफ़्लो प्रश्न पर एक नज़र डाली: "क्या एक URL में एक से अधिक प्रश्न होना मान्य है?", उत्तर हाँ प्रतीत होता है। इसके अलावा यह वर्षों पहले था इसलिए मुझे विवरण याद नहीं है, लेकिन मैं समस्याओं में भाग गया जब इसे सही ढंग से संभाला नहीं गया था।
ल्यूकहैप

मैं यह नहीं कह रहा हूं कि वे वास्तविक दुनिया में मौजूद नहीं हैं, और एक शायद उन्हें संभालना चाहता है, लेकिन एक उचित रूप से गठित URL में, प्रश्न चिह्न एक "आरक्षित वर्ण" है और एक के अलावा कोई भी प्रश्न चिह्न है क्वेरी पैरामीटर शुरू करना URL-एन्कोडेड होना चाहिए।

1
आप अंतिम पंक्ति return url.endsWith("?") ? url.slice(0,-1) : url;को उस केस को कवर करने के लिए बदलना चाह सकते हैं जहां हटाया जाने वाला पैरामीटर क्वेरी स्ट्रिंग में केवल एक है
कोनिममन

@Konamiman जब पैरामीटर डेटा को बदलेगा, उदाहरण के लिए 'aq' को हटाने से: google.com/search?q=test???&aq=f लेकिन मुझे जो आप से मतलब है, वह url को साफ करने में अच्छा लगेगा, भले ही वह कितना भी अच्छा क्यों न हो। ? कोई नुकसान नहीं करता है। तर्क को केवल यह सुनिश्चित करने की आवश्यकता है कि अंतिम? यह भी पहला है?
ल्यूकहैप

21

मैं रेगेक्स समाधान के साथ प्रमुख मुद्दों को नहीं देखता हूं। लेकिन, टुकड़ा पहचानकर्ता (के बाद पाठ #) को संरक्षित करने के लिए मत भूलना ।

यहाँ मेरा समाधान है:

function RemoveParameterFromUrl(url, parameter) {
  return url
    .replace(new RegExp('[?&]' + parameter + '=[^&#]*(#.*)?$'), '$1')
    .replace(new RegExp('([?&])' + parameter + '=[^&]*&'), '$1');
}

और बॉबिन की बात के लिए, हाँ - आपको .पैरामीटर नामों में वर्णों से बचना होगा ।


1
यहां एक बेहतर रेगेक्स है जो काम करता है जब पैरामैटर का कोई मूल्य नहीं है (यानी 'ex.com?removeMe'), और टुकड़ों में पैरामीटर को प्रतिस्थापित नहीं करेगा (यानी 'ex.com?#&dont=removeMe') या पथ (यानी) ex.com/&dont=removeMe '):url.replace(new RegExp('^([^#]*\?)(([^#]*)&)?' + parameter + '(\=[^&#]*)?(&|#|$)' ), '$1$3$5').replace(/^([^#]*)((\?)&|\?(#|$))/,'$1$3$4')
स्टीफन एम। हैरिस

यह स्टीफन एम। हैरिस काम नहीं करेगा। अपने कोड को एक परम के रूप में एक खाली स्ट्रिंग देने की कोशिश करें और देखें कि क्या होता है ...
डेविड फिशर

15

आप URL को इसके साथ बदल सकते हैं:

window.history.pushState({}, document.title, window.location.pathname);

इस तरह, आप खोज पैरामीटर के बिना URL को अधिलेखित कर सकते हैं, मैं इसका उपयोग जीईटी मापदंडों को लेने के बाद URL को साफ करने के लिए करता हूं।


13

एक रेगीक्स समाधान में दिलचस्पी रखने वाले किसी भी व्यक्ति ने एक क्वेरिस्ट्रिंग पैरामीटर को जोड़ने / हटाने / अपडेट करने के लिए इस फ़ंक्शन को एक साथ रखा है। मान की आपूर्ति नहीं करने से पैरामीटर को हटा दिया जाएगा, आपूर्ति करने से पैरामीटर जुड़ जाएगा / अपडेट हो जाएगा। यदि कोई URL नहीं दिया गया है, तो इसे window.location से पकड़ा जाएगा। यह समाधान url के लंगर को भी ध्यान में रखता है।

function UpdateQueryString(key, value, url) {
    if (!url) url = window.location.href;
    var re = new RegExp("([?&])" + key + "=.*?(&|#|$)(.*)", "gi"),
        hash;

    if (re.test(url)) {
        if (typeof value !== 'undefined' && value !== null)
            return url.replace(re, '$1' + key + "=" + value + '$2$3');
        else {
            hash = url.split('#');
            url = hash[0].replace(re, '$1$3').replace(/(&|\?)$/, '');
            if (typeof hash[1] !== 'undefined' && hash[1] !== null) 
                url += '#' + hash[1];
            return url;
        }
    }
    else {
        if (typeof value !== 'undefined' && value !== null) {
            var separator = url.indexOf('?') !== -1 ? '&' : '?';
            hash = url.split('#');
            url = hash[0] + separator + key + '=' + value;
            if (typeof hash[1] !== 'undefined' && hash[1] !== null) 
                url += '#' + hash[1];
            return url;
        }
        else
            return url;
    }
}

अपडेट करें

क्वेरिस्ट्रिंग में पहले पैरामीटर को हटाते समय एक बग था, मैंने एक फिक्स को शामिल करने के लिए रेगेक्स और परीक्षण को फिर से काम किया है।

अद्यतन २

हैशटैग को हटाते समय स्थिति को ठीक करने के लिए @schellmax अपडेट हैशटैग से पहले सीधे एक querystring चर को हटाते समय हैशटैग प्रतीक खो जाता है


1
यदि आपके पास दो क्वेरी स्ट्रिंग हैं और पहले को हटा दें तो यह काम नहीं करता है। Url में उत्तीर्ण अमान्य हो जाता है क्योंकि? हटाया जाता है जब इसे संरक्षित किया जाना चाहिए।
ब्लेक नीमेज्स्की

1
@BlakeNiemyjski उस बग को खोजने के लिए धन्यवाद, मैंने पहले पैरामीटर के लिए वर्कअराउंड को शामिल करने के लिए स्क्रिप्ट को अपडेट किया है
एलमेलै

1
गलती से यहाँ हैश निकाल देंगे:UpdateQueryString('a', null, 'http://www.test.com?a=b#c');
schellmax

शांत समारोह, धन्यवाद। FYI करें: प्रत्येक () लूप में इग्नोर एरे कीज के साथ इसका उपयोग करते समय, आपको urlप्रत्येक रिप्लेसमेंट रिप्रेशन के लिए कभी सिकुड़ने की आवश्यकता हो सकती है । लेकिन, इसका मतलब है कि आपको valueतर्कों में एक दर्ज करना होगा, जो अर्ध-निकाले गए आधे को छोड़ देगा। इस, उपयोग मुकाबला करने के लिए undefinedया nullके लिए value: की तरह तर्कurl_from_last_iteration = UpdateQueryString(current_ignore_key, undefined/null, url_from_last_iteration);
dhaupin

7

मान लें कि आप URI से कुंजी = वैल पैरामीटर हटाना चाहते हैं:

function removeParam(uri) {
   return uri.replace(/([&\?]key=val*$|key=val&|[?&]key=val(?=#))/, '');
}

अच्छी तरह से काम करता है लेकिन रेगेक्स में पहले प्रश्न चिह्न से बचना अनावश्यक है और लिंटर त्रुटि का कारण बन /([&?]key=val*$|key=val&|[?&]key=val(?=#))/सकता है : एस्लिंट जैसे लिंटर का उपयोग करते समय बेहतर हो सकता है
quetzaluz

7

यहाँ मैं उपयोग कर रहा हूँ:

if (location.href.includes('?')) { 
    history.pushState({}, null, location.href.split('?')[0]); 
}

मूल URL: http://www.example.com/test/hello?id=123&foo=bar
गंतव्य URL: http://www.example.com/test/hello


क्या आप इस कोड को पेज लोड पर लिखते हैं? मैं आपसे पूछ रहा हूं क्योंकि जब मैं यह पृष्ठ लोड कर रहा हूं या नहीं लिख रहा हूं, तो यह काम नहीं करता है।
noobprogrammer

6

इस सवाल और इस github gist पर आधारित मापदंडों को जोड़ने और हटाने के लिए एक पूर्ण कार्य का उपयोग करता है: https://gist.github.com/excalq/2961415

var updateQueryStringParam = function (key, value) {

    var baseUrl = [location.protocol, '//', location.host, location.pathname].join(''),
        urlQueryString = document.location.search,
        newParam = key + '=' + value,
        params = '?' + newParam;

    // If the "search" string exists, then build params from it
    if (urlQueryString) {

        updateRegex = new RegExp('([\?&])' + key + '[^&]*');
        removeRegex = new RegExp('([\?&])' + key + '=[^&;]+[&;]?');

        if( typeof value == 'undefined' || value == null || value == '' ) { // Remove param if value is empty

            params = urlQueryString.replace(removeRegex, "$1");
            params = params.replace( /[&;]$/, "" );

        } else if (urlQueryString.match(updateRegex) !== null) { // If param exists already, update it

            params = urlQueryString.replace(updateRegex, "$1" + newParam);

        } else { // Otherwise, add it to end of query string

            params = urlQueryString + '&' + newParam;

        }

    }
    window.history.replaceState({}, "", baseUrl + params);
};

आप इस तरह से पैरामीटर जोड़ सकते हैं:

updateQueryStringParam( 'myparam', 'true' );

और इसे इस तरह से हटा दें:

updateQueryStringParam( 'myparam', null );

इस सूत्र में कई लोगों ने कहा कि रेगेक्स शायद सबसे अच्छा / स्थिर समाधान नहीं है ... इसलिए 100% यकीन नहीं है कि अगर इस चीज में कुछ खामियां हैं, लेकिन जहां तक ​​मैंने परीक्षण किया है यह बहुत अच्छा काम करता है।


5

यह आज के ब्राउज़र के लिए URL वर्ग के साथ एक साफ संस्करण निकालें क्वेरी पैरामीटर है:

function removeUrlParameter(url, paramKey)
{
  var r = new URL(url);
  r.searchParams.delete(paramKey);
  return r.href;
}

URLSearchParams पुराने ब्राउज़रों पर समर्थित नहीं है

https://caniuse.com/#feat=urlsearchparams

IE, एज (17 से नीचे) और सफारी (10.3 से नीचे) URL वर्ग के अंदर URLSearchParams का समर्थन नहीं करते हैं।

Polyfills

URLSearchParams केवल पॉलीफ़िल

https://github.com/WebReflection/url-search-params

अंतिम WHATWG विनिर्देशों से मिलान करने के लिए पॉलीफ़िल URL और URLSearchParams को पूरा करें

https://github.com/lifaon74/url-polyfill


4

JQuery का उपयोग करना:

function removeParam(key) {
    var url = document.location.href;
    var params = url.split('?');
    if (params.length == 1) return;

    url = params[0] + '?';
    params = params[1];
    params = params.split('&');

    $.each(params, function (index, value) {
        var v = value.split('=');
        if (v[0] != key) url += value + '&';
    });

    url = url.replace(/&$/, '');
    url = url.replace(/\?$/, '');

    document.location.href = url;
}

3

एक फ़ंक्शन के रूप में उपरोक्त संस्करण

function removeURLParam(url, param)
{
 var urlparts= url.split('?');
 if (urlparts.length>=2)
 {
  var prefix= encodeURIComponent(param)+'=';
  var pars= urlparts[1].split(/[&;]/g);
  for (var i=pars.length; i-- > 0;)
   if (pars[i].indexOf(prefix, 0)==0)
    pars.splice(i, 1);
  if (pars.length > 0)
   return urlparts[0]+'?'+pars.join('&');
  else
   return urlparts[0];
 }
 else
  return url;
}

2

आपको URI हेरफेर करने के लिए लाइब्रेरी का उपयोग करना चाहिए क्योंकि यह सतह पर ऐसा लगता है कि यह अपने आप करने के लिए अधिक जटिल है। यहां देखें: http://medialize.github.io/URI.js/


2

मैं जो देख सकता हूं, उसमें से कोई भी सामान्य पैरामीटर और सरणी पैरामीटर नहीं संभाल सकता है। यहाँ एक है कि करता है

function removeURLParameter(param, url) {
    url = decodeURI(url).split("?");
    path = url.length == 1 ? "" : url[1];
    path = path.replace(new RegExp("&?"+param+"\\[\\d*\\]=[\\w]+", "g"), "");
    path = path.replace(new RegExp("&?"+param+"=[\\w]+", "g"), "");
    path = path.replace(/^&/, "");
    return url[0] + (path.length
        ? "?" + path
        : "");
}

function addURLParameter(param, val, url) {
    if(typeof val === "object") {
        // recursively add in array structure
        if(val.length) {
            return addURLParameter(
                param + "[]",
                val.splice(-1, 1)[0],
                addURLParameter(param, val, url)
            )
        } else {
            return url;
        }
    } else {
        url = decodeURI(url).split("?");
        path = url.length == 1 ? "" : url[1];
        path += path.length
            ? "&"
            : "";
        path += decodeURI(param + "=" + val);
        return url[0] + "?" + path;
    }
}

इसे कैसे उपयोग करे:

url = location.href;
    -> http://example.com/?tags[]=single&tags[]=promo&sold=1

url = removeURLParameter("sold", url)
    -> http://example.com/?tags[]=single&tags[]=promo

url = removeURLParameter("tags", url)
    -> http://example.com/

url = addURLParameter("tags", ["single", "promo"], url)
    -> http://example.com/?tags[]=single&tags[]=promo

url = addURLParameter("sold", 1, url)
    -> http://example.com/?tags[]=single&tags[]=promo&sold=1

बेशक, एक पैरामीटर को अपडेट करने के लिए, बस फिर हटाएं। इसके लिए डमी फंक्शन करने के लिए स्वतंत्र महसूस करें।


path.replace(new RegExp("&?"+param+"=[\\w]+", "g"), "");मैं [\\w]*मानों के बिना "परम =" जैसे मापदंडों को शामिल करने के लिए रेगेक्स को बदल दूंगा।
टॉमस प्राडो

2

इस थ्रेड पर सभी प्रतिक्रियाओं का दोष है कि वे URL के एंकर / खंड भागों को संरक्षित नहीं करते हैं।

इसलिए यदि आपका URL दिखता है:

http://dns-entry/path?parameter=value#fragment-text

और आप 'पैरामीटर' की जगह लेते हैं

आप अपना टुकड़ा पाठ खो देंगे।

निम्नलिखित पिछले जवाबों का अनुकूलन है (ल्यूकपीएच के माध्यम से बॉबिन) जो इस समस्या को हल करता है:

function removeParameter(url, parameter)
{
  var fragment = url.split('#');
  var urlparts= fragment[0].split('?');

  if (urlparts.length>=2)
  {
    var urlBase=urlparts.shift(); //get first part, and remove from array
    var queryString=urlparts.join("?"); //join it back up

    var prefix = encodeURIComponent(parameter)+'=';
    var pars = queryString.split(/[&;]/g);
    for (var i= pars.length; i-->0;) {               //reverse iteration as may be destructive
      if (pars[i].lastIndexOf(prefix, 0)!==-1) {   //idiom for string.startsWith
        pars.splice(i, 1);
      }
    }
    url = urlBase + (pars.length > 0 ? '?' + pars.join('&') : '');
    if (fragment[1]) {
      url += "#" + fragment[1];
    }
  }
  return url;
}

1
हल्का सुधार, ताकि जब अंतिम URL पैरामीटर हटा दिया जाए, '?' यह भी हटा दिया जाता है: लाइन url = urlBase+'?'+pars.join('&');को बदल देंurl = urlBase + (pars.length > 0 ? '?' + pars.join('&') : "");
कोडी एस

क्या होगा अगर # पहले आए? dns-entry / path # अंश-पाठ? पैरामीटर = मूल्य
ajayv

2

यहाँ एक समाधान है कि:

  1. URLSearchParams का उपयोग करता है (regex को समझना मुश्किल नहीं है)
  2. पुनः लोड किए बिना खोज बार में URL अपडेट करता है
  3. URL के अन्य सभी भागों को रखता है (जैसे हैश)
  4. ?यदि अंतिम पैरामीटर को हटा दिया गया था, तो क्वेरी स्ट्रिंग में अतिशयोक्ति को हटा देता है
function removeParam(paramName) {
    let searchParams = new URLSearchParams(window.location.search);
    searchParams.delete(paramName);
    if (history.replaceState) {
        let searchString = searchParams.toString().length > 0 ? '?' + searchParams.toString() : '';
        let newUrl = window.location.protocol + "//" + window.location.host + window.location.pathname +  searchString + window.location.hash;
        history.replaceState(null, '', newUrl);
    }
}

नोट: जैसा कि अन्य उत्तरों में बताया गया है URLSearchParams IE में समर्थित नहीं है , इसलिए एक पॉलीफ़िल का उपयोग करें ।


2

यदि यह एक उदाहरण है URL, के deleteफंक्शन का उपयोग करेंsearchParams

let url = new URL(location.href);
url.searchParams.delete('page');

1

एक और सीधा और सरल जवाब होगा

let url = new URLSearchParams(location.search)
let key = 'some_key'

return url.has(key)
    ? location.href.replace(new RegExp(`[?&]${key}=${url.get(key)}`), '')
    : location.href

0

Ssh_imov द्वारा समाधान का एक संशोधित संस्करण

function removeParam(uri, keyValue) {
      var re = new RegExp("([&\?]"+ keyValue + "*$|" + keyValue + "&|[?&]" + keyValue + "(?=#))", "i"); 
      return uri.replace(re, '');
    }

इस तरह बुलाओ

removeParam("http://google.com?q=123&q1=234&q2=567", "q1=234");
// returns http://google.com?q=123&q2=567

एक बात ध्यान रखें कि जब परम के मूल्य को भेजना अंतरिक्ष को% 20 में परिवर्तित करता है
xeon zolt

0

यह URL w / o किसी भी GET पैरामीटर देता है:

var href = document.location.href;
var search = document.location.search;
var pos = href.indexOf( search );
if ( pos !== -1 ){
    href = href.slice( 0, pos );
    console.log( href );
}

0

मैंने उर मापदंडों को संसाधित करने और एक स्ट्रिंग के रूप में अंतिम स्थिति प्राप्त करने और पृष्ठ को पुनर्निर्देशित करने के लिए व्यावहारिक रूप से निम्नलिखित फ़ंक्शन लिखा। उम्मीद है इससे लाभ होगा।

function addRemoveUrlQuery(addParam = {}, removeParam = [], startQueryChar = '?'){

    let urlParams = new URLSearchParams(window.location.search);

    //Add param
    for(let i in addParam){
        if(urlParams.has(i)){ urlParams.set(i, addParam[i]); }
        else                { urlParams.append(i, addParam[i]); }
    }

    //Remove param
    for(let i of removeParam){
        if(urlParams.has(i)){
            urlParams.delete(i);
        }
    }

    if(urlParams.toString()){
        return startQueryChar + urlParams.toString();
    }

    return '';
}

उदाहरण के लिए, जब मैं एक बटन पर क्लिक करता हूं, तो मैं चाहता हूं कि पृष्ठ मूल्य हटा दिया जाए और श्रेणी मूल्य जोड़ा जाए।

let button = document.getElementById('changeCategory');
button.addEventListener('click', function (e) {

    window.location = addRemoveUrlQuery({'category':'cars'}, ['page']);

});

मुझे लगता है कि यह बहुत उपयोगी था!


0

खुशी है कि आपने यहां स्क्रॉल किया।

मैं आपको अगले संभावित समाधान द्वारा इस कार्य को हल करने का सुझाव दूंगा:

  1. आपको केवल आधुनिक ब्राउज़र (एज> = 17) का समर्थन करने की आवश्यकता है - URLSearchParams.delete () एपीआई का उपयोग करें । यह मूल है और स्पष्ट रूप से इस कार्य को हल करने का सबसे सुविधाजनक तरीका है।
  2. यदि यह एक विकल्प नहीं है, तो आप ऐसा करने के लिए एक फ़ंक्शन लिखना चाह सकते हैं। ऐसा समारोह करता है
    • यदि कोई पैरामीटर मौजूद नहीं है तो URL न बदलें
    • मान के बिना URL पैरामीटर निकालें, जैसे http://google.com/?myparm
    • मान के साथ URL पैरामीटर निकालें, जैसे http://google.com/?myparm=1
    • URL पैरामीटर निकालें यदि यह URL में दो बार है, जैसे http://google.com?qp=1&qpqp=2&qp=1
    • उपयोग नहीं करता है forलूप का और उस पर लूपिंग के दौरान सरणी को संशोधित नहीं करता है
    • अधिक कार्यात्मक है
    • regexp समाधान की तुलना में अधिक पठनीय है
    • यह सुनिश्चित करने से पहले कि आपका URL एन्कोडेड नहीं है

IE> 9 (ES5 संस्करण) में काम करता है

function removeParamFromUrl(url, param) {  // url: string, param: string
  var urlParts = url.split('?'),
      preservedQueryParams = '';

  if (urlParts.length === 2) {
    preservedQueryParams = urlParts[1]
      .split('&')
      .filter(function(queryParam) {
        return !(queryParam === param || queryParam.indexOf(param + '=') === 0)
      })
      .join('&');
  }

  return urlParts[0] +  (preservedQueryParams && '?' + preservedQueryParams); 
}

फैंसी ईएस 6 संस्करण

function removeParamFromUrlEs6(url, param) {
  const [path, queryParams] = url.split('?');
	let preservedQueryParams = '';

  if (queryParams) {
    preservedQueryParams = queryParams
      .split('&')
      .filter(queryParam => !(queryParam === param || queryParam.startsWith(`${param}=`)))
      .join('&');
  }

  return `${path}${preservedQueryParams && `?${preservedQueryParams}`}`;  
}

देखें यह यहां कैसे काम करता है


0
function removeParamInAddressBar(parameter) {
    var url = document.location.href;
    var urlparts = url.split('?');

    if (urlparts.length >= 2) {
        var urlBase = urlparts.shift();
        var queryString = urlparts.join("?");

        var prefix = encodeURIComponent(parameter) + '=';
        var pars = queryString.split(/[&;]/g);
        for (var i = pars.length; i-- > 0;) {
            if (pars[i].lastIndexOf(prefix, 0) !== -1) {
                pars.splice(i, 1);
            }
        }

        if (pars.length == 0) {
            url = urlBase;
        } else {
            url = urlBase + '?' + pars.join('&');
        }

        window.history.pushState('', document.title, url); // push the new url in address bar
    }
    return url;
}

-1
const params = new URLSearchParams(location.search)
params.delete('key_to_delete')
console.log(params.toString())

यह एक प्रश्न का उत्तर है जो बहुत पुराना है और पहले से ही एक स्वीकृत उत्तर है। कृपया बताएं कि इस उत्तर को क्या देना है जो अन्य उत्तरों से नया / अलग है। इसके अलावा, उत्तर में स्पष्टीकरण शामिल होना चाहिए, न कि केवल कोड।
नर्सरी

-2

यदि आप jQuery में हैं, तो एक अच्छा क्वेरी स्ट्रिंग हेरफेर प्लगइन है:


1
उन कड़ियों में से पहला मर चुका है; विकल्प: github.com/fadhlirahim/jqURL
मार्टिन कारपेंटर

धन्यवाद, हटा दिया - यह कुछ वर्षों के बाद बासी जाने के लिए बाध्य था! :)
दामोविसा

-2
function removeQueryStringParameter(uri, key, value) 
{

var re = new RegExp("([?&])" + key + "=.*?(&|$)", "i");

    var separator = uri.indexOf('?') !== -1 ? "&" : "?";

    if (uri.match(re)) {

        return uri.replace(re, '');

    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.