আমি কীভাবে জাভাস্ক্রিপ্টে কোয়েরি স্ট্রিং প্যারামিটার মুছতে পারি?


127

নিয়মিত এক্সপ্রেশন ব্যবহার না করে স্ট্যান্ডার্ড জাভাস্ক্রিপ্টে কোনও ইউআরএল স্ট্রিংয়ে কোয়েরি স্ট্রিং থেকে কোনও প্যারামিটার মুছার কি আরও ভাল উপায় আছে?

আমি এখন পর্যন্ত যা নিয়ে এসেছি তা আমার পরীক্ষাগুলিতে কাজ করে বলে মনে হচ্ছে তবে আমি ক্যোরিস্ট্রিং পার্সিং পুনরায় সাজানো পছন্দ করি না!

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- তে বিশেষ কোনও অক্ষর থাকে, যেমন ''। এবং এটি কোনও গ্লোবাল রেজেক্স নয়, সুতরাং এটি কেবলমাত্র প্যারামিটারের একটি উদাহরণ সরিয়ে ফেলবে।

আমি এর জন্য একটি সাধারণ রেজিপ্যাক্স ব্যবহার করব না, আমি প্যারামিটারগুলিতে পার্স করব এবং আপনি যা চান না তা হারাতে চাই।

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;
}

ফুবারের সাথে মিলে যাওয়া বারটি সম্পর্কে ভাল কথা। একটি আমার প্রয়োজনের জন্য আমি আমার আসল রেগেক্স আপডেট করেছি? বা একটি [&;] শুরুতে। এটি বিবেচনা করার জন্য আপনার সমাধানটিও পড়ছেন ...
ম্যাথু লক

5
আপনি যদি "মুক্তি" চান? অপসারণের পরে যখন কোনও পরামিতি নেই, pars.length == 0 পরীক্ষা করার জন্য একটি if শর্ত যুক্ত করুন এবং যদি এটি 0 হয়, তবে "?" যুক্ত করার পরিবর্তে "url = urlparts [0]" তৈরি করুন।
জনমকালিয়ি

2
ইউক্রোডিউআরআইকিউম্পোন্ট (প্যারামিটার) এর সাথে ইউআরএল টুকরাটির তুলনা করা কি নিরাপদ? ইউআরএল যদি প্যারামিটারের নামটিকে আলাদাভাবে এনকোড করে? উদাহরণস্বরূপ 'two% 20' এর বিপরীতে 'two% 20वर्ड'। এটির সাথে মোকাবিলা করার জন্য, প্যারামিটারের নামটি ডিকোড করা এবং এটি একটি সাধারণ স্ট্রিং হিসাবে তুলনা করা ভাল।
অ্যাড্রিয়ান প্রানক

9
হালকা উন্নতি, যাতে চূড়ান্ত ইউআরএল প্যারামিটার সরানো হয়, তখন '?' খুব সরানো: পরিবর্তনের লাইন url= urlparts[0]+'?'+pars.join('&');থেকেurl= urlparts[0] + (pars.length > 0 ? '?' + pars.join('&') : "");
কোডি এস

2
@ কেট্টুনিক / @ জোনাসএক্সেলসন ইউআরএল কোয়েরি প্যারামিটারগুলি প্রাকৃতিকভাবে সংবেদনশীল নয়।
ববিনস

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
নোট যা URLSearchParamsআইই, এজ 16 এবং আইওএস 10.2 সাফারি দ্বারা সমর্থিত নয়। (রেফ: caniuse.com/#feat=urlsearchparams )
খিয়াভ রেওয়াই

3
@খিয়াভরেয় হ্যাঁ উত্তরের প্রথম দুটি শব্দের মতো একই লিঙ্কটি দিন :)
ইউরি তারাব্যাঙ্কো

23

ববিন্স উত্তর থেকে অনুলিপি করা হয়েছে, তবে এটি ক্যোয়ারী স্ট্রিংয়ে প্রশ্ন চিহ্নগুলিকে সমর্থন করে, যেমন

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

ইউআরএলে একাধিক প্রশ্ন চিহ্ন থাকা বৈধ?

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- এনকোড হওয়া উচিত।

1
আপনি return url.endsWith("?") ? url.slice(0,-1) : url;কেস স্ট্রিংয়ের প্যারামিটারটি সরিয়ে ফেলতে হবে এমন
কেসটি

@ কনামিমন যে প্যারামিটারের ডেটাগুলিকে পরিবর্তন করবে যখন উদাহরণস্বরূপ: google.com/search?q=test???aa=f থেকে 'আক' অপসারণ করবেন তবে আপনি যা বলতে চাইছেন তা পেয়েছি, এমনকি ইউআরএল পরিষ্কার করা ভাল লাগবে যদি ? কোন ক্ষতি করে না যুক্তি কি শেষ নিশ্চিত করা দরকার? এছাড়াও প্রথম?
লুকপিএইচ

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') বা পথগুলিতে (যেমন 'প্যারামিটারটি প্রতিস্থাপন করবে না) এমন একটি উন্নত রেজেক্স এখানে কাজ করছে works ex.com/&dont=removeMe '):url.replace(new RegExp('^([^#]*\?)(([^#]*)&)?' + parameter + '(\=[^&#]*)?(&|#|$)' ), '$1$3$5').replace(/^([^#]*)((\?)&|\?(#|$))/,'$1$3$4')
স্টিফেন এম হ্যারিস

এটি স্টিফেন এম হ্যারিসের কাজ করবে না। আপনার কোডটিকে পরম হিসাবে খালি স্ট্রিং দেওয়ার চেষ্টা করুন এবং দেখুন কী ঘটে ...
ডেভিড ফিশার

15

আপনি এর সাথে ইউআরএল পরিবর্তন করতে পারেন:

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

এইভাবে, আপনি অনুসন্ধানের প্যারামিটার ছাড়াই ইউআরএলটি ওভাররাইট করতে পারেন, জিইটি পরামিতিগুলি নেওয়ার পরে আমি এটি ইউআরএল পরিষ্কার করতে ব্যবহার করি।


13

রেগেক্স সমাধানে আগ্রহী যে কেউ আমি একটি ক্যোরিস্ট্রিং প্যারামিটার যুক্ত / অপসারণ / আপডেট করতে এই ফাংশনটি একসাথে রেখেছি। কোনও মান সরবরাহ না করা প্যারামিটারটি সরিয়ে ফেলবে, একটি সরবরাহ করলে প্যারামিটার যুক্ত / আপডেট হবে। যদি কোনও ইউআরএল সরবরাহ না করা হয় তবে এটি উইন্ডো থেকে স্থান নেওয়া হবে oc লোকেশন। এই সমাধানটি ইউআরএল এর অ্যাঙ্করটিকেও বিবেচনায় রাখে।

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;
    }
}

হালনাগাদ

ক্যোরিস্ট্রিংয়ের প্রথম প্যারামিটারটি সরানোর সময় একটি ত্রুটি হয়েছিল, আমি একটি ফিক্স অন্তর্ভুক্ত করার জন্য রেজেক্স এবং পরীক্ষা পুনরায় কাজ করেছি।

আপডেট 2

পরিস্থিতি ঠিক করতে @ শেলম্যাক্স আপডেট যেখানে হ্যাশট্যাগের আগে সরাসরি কোয়েস্ট্রিং ভেরিয়েবল অপসারণ করার সময় হ্যাশট্যাগ প্রতীকটি হারিয়ে যায়


1
আপনার দুটি ক্যোয়ারী স্ট্রিং থাকলে এবং প্রথমটি সরিয়ে ফেললে এটি কাজ করে না। ইউআরএল পাস করা অবৈধ হয়ে যায় কারণ? এটি সংরক্ষণ করা উচিত যখন সরানো হয়।
ব্লেক নিমাইজস্কি

1
@ ব্লাকনিমিজেস্কি এই বাগটি খুঁজে পাওয়ার জন্য ধন্যবাদ, আমি প্রথম প্যারামিটারের জন্য একটি
কর্মক্ষেত্র

1
দুর্ঘটনাক্রমে এখানে হ্যাশটি সরিয়ে ফেলবে:UpdateQueryString('a', null, 'http://www.test.com?a=b#c');
স্কেলম্যাক্স

ধন্যবাদ দুর্দান্ত কাজ, ধন্যবাদ। এফওয়াইআই: এটি প্রতিটি () `লুপগুলিতে উপেক্ষা করে অ্যারে কীগুলির সাথে ব্যবহার করার সময়, urlপ্রতিটি প্রতিস্থাপনের পুনরাবৃত্তির জন্য আপনাকে কখনও একটি সঙ্কোচিত সংজ্ঞা দিতে হবে । তবে, এর অর্থ আপনার অবশ্যই valueযুক্তিগুলির মধ্যে একটি প্রবেশ করাতে হবে, যা কোয়েরিস্ট্রিংটিকে অর্ধেক সরিয়ে ফেলবে। এটির মোকাবিলা করতে, যুক্তি undefinedবা ব্যবহারের nullজন্য valueযেমন:url_from_last_iteration = UpdateQueryString(current_ignore_key, undefined/null, url_from_last_iteration);
ধাপিন

7

ধরে নিচ্ছি আপনি ইউআরআই থেকে কী = ভাল প্যারামিটারটি সরাতে চান:

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

ভাল কাজ করে তবে রেজেক্সে প্রথম প্রশ্ন চিহ্নটি থেকে বেরিয়ে আসা অপ্রয়োজনীয় এবং ল্যান্টারের ত্রুটির কারণ /([&?]key=val*$|key=val&|[?&]key=val(?=#))/হতে পারে : এসলিন্টের মতো একটি লম্বাটি ব্যবহার করার সময় ভাল হতে পারে
কোয়েটজলজ

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

এই প্রশ্ন এবং এই গিথুব গিস্টের উপর ভিত্তি করে প্যারামিটার যুক্ত এবং অপসারণের জন্য তিনি এখানে সম্পূর্ণ ফাংশন করেছেন: 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

এটি আজকের ব্রাউজারগুলির জন্য ইউআরএল বর্গের সাথে ক্যোয়ারী প্যারামিটার মুছে ফেলা সংস্করণ :

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

পুরানো ব্রাউজারগুলিতে URLS SearchParams সমর্থিত নয়

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

আইই, এজ (17 এর নীচে) এবং সাফারি (10.3 এর নীচে) ইউআরএল বর্গের মধ্যে URLS SearchParams সমর্থন করে না।

Polyfills

ইউআরএলস অনুসন্ধানপ্রেমগুলি কেবল পলফিল

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

সর্বশেষ WHATWG নির্দিষ্টকরণের সাথে মেলে সম্পূর্ণ পলিফিল URL এবং URL অনুসন্ধানপ্রেমগুলি

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

আপনি নিজে থেকে ইউআরআই ম্যানিপুলেশন করতে কোনও লাইব্রেরি ব্যবহার করা উচিত কারণ এটি পৃষ্ঠায় এটি করা নিজের চেয়ে বেশি জটিল বলে মনে হচ্ছে। একবার দেখুন: 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

এই থ্রেডের সমস্ত প্রতিক্রিয়াগুলির মধ্যে একটি ত্রুটি রয়েছে যে তারা ইউআরএলগুলির অ্যাঙ্কর / টুকরা অংশ সংরক্ষণ করে না।

সুতরাং যদি আপনার ইউআরএলটি এমন দেখাচ্ছে:

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 = urlBase+'?'+pars.join('&');থেকেurl = urlBase + (pars.length > 0 ? '?' + pars.join('&') : "");
কোডি এস


2

এখানে একটি সমাধান যা:

  1. ইউআরএল সার্চপ্যারাম ব্যবহার করে (রেজেক্স বুঝতে অসুবিধা নেই)
  2. পুনরায় লোড ছাড়াই অনুসন্ধান বারে URL আপডেট করে
  3. ইউআরএল এর অন্যান্য সমস্ত অংশ বজায় রাখে (যেমন হ্যাশ)
  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);
    }
}

দ্রষ্টব্য: অন্যান্য উত্তরে নির্দেশিত হিসাবে ইউআরএল সার্চপ্যারামগুলি আইই তে সমর্থিত নয় , সুতরাং একটি পলিফিল ব্যবহার করুন ।


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

পরম এর মান পাঠানোর সময় একটি জিনিস মনে রাখবেন স্থানটি ২০% এ রূপান্তর করুন
xeon zolt 11

0

এটি ইউআরএল ডাব্লু / ও যে কোনও প্যারামিটারগুলি দেয়:

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) - URLS SearchParams.delete () API ব্যবহার করুন । এটি স্থানীয় এবং স্পষ্টতই এই কাজটি সমাধানের সবচেয়ে সুবিধাজনক উপায়।
  2. যদি এটি কোনও বিকল্প না হয় তবে আপনি এটি করতে কোনও ফাংশন লিখতে চাইতে পারেন। যেমন একটি ফাংশন না
    • কোনও পরামিতি উপস্থিত না থাকলে URL পরিবর্তন করবেন না
    • মত মান ব্যতীত ইউআরএল প্যারামিটার সরান http://google.com/?myparm
    • মত মান সহ ইউআরএল প্যারামিটার সরান http://google.com/?myparm=1
    • ইউআরএল প্যারামিটারটি যদি এটি URL এ দুবার হয় তবে সরান is http://google.com?qp=1&qpqp=2&qp=1
    • forলুপ ব্যবহার করে না এবং লুপিংয়ের সময় অ্যারে সংশোধন করে না
    • আরও কার্যকর
    • regexp সমাধানের চেয়ে বেশি পঠনযোগ্য
    • ব্যবহারের আগে নিশ্চিত হয়ে নিন যে আপনার URL টি এনকোডড নয়

আইই> 9 (ইএস 5 সংস্করণ) এ কাজ করে

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); 
}

অভিনব ES6 সংস্করণ

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, '');

    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.