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


364

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


1
দেখে মনে হচ্ছে আমি আমার ক্যারিয়ারের প্রায় 100 বার জাভাস্ক্রিপ্টে "parseQueryString" ফাংশন লিখেছি। এটা কঠিন না. মূল পয়েন্টগুলি String#splitসর্বাধিক বিভাজনের জন্য একটি দ্বিতীয় প্যারামিটার নেয়। jQuery mapএরও সহায়ক হবে।
jpsimons

এই এসও পোস্টটিতে অনেকগুলি সমাধান রয়েছে স্ট্যাকওভারফ্লো.com
দিলীপ রাজকুমার

1
কিছু লোকেরা "অ্যাড্রেস বারে ইউআরএল কীভাবে পরিবর্তন করবেন" এবং অন্যদের "কীভাবে কোনও ইউআরএল ভেরিয়েবল পরিবর্তন করবেন"
বোঝাতে এই প্রশ্নটি নিচ্ছেন

উত্তর:


468

আমি নিম্নলিখিত ফাংশনটি লিখেছি যা আমি অর্জন করতে চাই তা সম্পাদন করে:

function updateQueryStringParameter(uri, key, value) {
  var re = new RegExp("([?&])" + key + "=.*?(&|$)", "i");
  var separator = uri.indexOf('?') !== -1 ? "&" : "?";
  if (uri.match(re)) {
    return uri.replace(re, '$1' + key + "=" + value + '$2');
  }
  else {
    return uri + separator + key + "=" + value;
  }
}

36
ইউআরআই-তে একটি হ্যাশ থাকাকালীন এই উত্তরটি কার্যকর হয় না - কোয়েরি স্ট্রিংগুলি হ্যাশের আগে অবশ্যই স্থাপন করা উচিত, অন্যথায় তারা সার্ভারে প্রেরণ করবে না। jsfiddle.net/4yXzR
গ্রেগ

20
[?|&]হওয়া উচিত[?&]
soju

8
varবিভাজক ঘোষণার ঠিক আগে যুক্ত করে স্থানীয় ফাংশনে বিভাজক পরিবর্তনশীল স্কোপিং সীমাবদ্ধ করুন ।
আন্দ্রে স্যালিসেটি

3
আমি মনে করি, আপনার value = encodeURIComponent(value);প্রথম লাইনে যুক্ত করা উচিত , অন্যথায় লাইন ব্রেকগুলি সঠিকভাবে এড়ানো যায় না।
ফেলিক্স

18
এই হ্যাশ যত্ন হিসাবে ভাল লাগবে gist.github.com/niyazpk/f8ac616f181f6042d1e0
Niyaz

189

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

কোনও মান সরবরাহ না করা প্যারামিটারটি সরিয়ে ফেলবে, একটি সরবরাহ করলে প্যারামিটার যুক্ত / আপডেট হবে। যদি কোনও ইউআরএল সরবরাহ না করা হয় তবে এটি উইন্ডো থেকে স্থান নেওয়া হবে 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;
        }
    }
}

হালনাগাদ

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

দ্বিতীয় আপডেট

@ জার্নব্যান্ডস - এর পরামর্শ অনুসারে - মুদ্রার মান পরীক্ষা করে অনির্ধারিত ও 0 টি মান নির্ধারণের জন্য নালার বিরুদ্ধে পরীক্ষা করতে

তৃতীয় আপডেট

একটি বাগ ছিল যেখানে একটি হ্যাশট্যাগের হ্যাশট্যাগ প্রতীকটি হ্রাস হওয়ার আগে সরাসরি কোয়েস্ট্রিিং ভেরিয়েবলটি সরিয়ে ফেলা হয়েছে যা স্থির হয়েছে

চতুর্থ আপডেট

প্রথম RegExp অবজেক্টে একটি রেগেক্স অপটিমাইজেশন নির্দেশ করার জন্য @ রবির ধন্যবাদ ob @ YonatanKarni দ্বারা পাওয়া (\? | &) ব্যবহার করে ইস্যু হওয়ার কারণে প্রাথমিক রেজেক্স সেট করুন ([? &])

পঞ্চম আপডেট

/ অন্য বিবৃতিতে হ্যাশ বর্ণ ঘোষণার অপসারণ


5
কেবলমাত্র 'সত্যতা' পরীক্ষা করা valueআপনাকে কোয়েরিস্ট্রিং থেকে ভেরিয়েবলগুলি মুছে ফেলবে যখন আপনি তাদের মান 0 এ স্থির করেছেন তাই আপনার পরিবর্তে if (value) {}আপনার ব্যবহার করা উচিতif (typeOf value !== 'undefined' && value !== null) {}
জারান বেরেন্ডস

1
RegExp- এ ([? | &]) আসলেই হওয়া উচিত ([[& &])
রোবি

মজার বিষয় কীভাবে এটি আসল সমাধান থেকে নিয়ে যায় - এছাড়াও ব্যবহার করতে পারে (\? | &)
এলেমায়ো

1
ক্রোম সংস্করণ 31.0.1650.63 এ রেগেক্স তৈরির ক্ষেত্রে "অবৈধ নিয়মিত ব্যতিক্রম / অবৈধ গোষ্ঠী" ব্যতিক্রম পেয়ে, "([? &])" হিসাবে প্রথমটির সমাধান করে সমাধান করা হয়েছে
যোনাতন করণি

1
আমার ওসিডি হওয়া বাদে এই বিষয়গুলি নয়, তবে চলকটি hashদুটিবার ঘোষিত হয়;)
উইলিংক

117

ইউআরএল সার্চপ্যারামস ইউটিলিটি এর সাথে একত্রে কার্যকর হতে পারে window.location.search। উদাহরণ স্বরূপ:

if ('URLSearchParams' in window) {
    var searchParams = new URLSearchParams(window.location.search);
    searchParams.set("foo", "bar");
    window.location.search = searchParams.toString();
}

এটি ইতিমধ্যে বিদ্যমান কিনা তা নির্বিশেষে এখন fooসেট করা হয়েছে bar

যাইহোক, উপরের অ্যাসাইনমেন্টটি window.location.searchকোনও পৃষ্ঠা লোডের কারণ ঘটায়, সুতরাং যদি তা পছন্দসই না হয় তবে ইতিহাসের এপিআই নীচে ব্যবহার করুন :

if ('URLSearchParams' in window) {
    var searchParams = new URLSearchParams(window.location.search)
    searchParams.set("foo", "bar");
    var newRelativePathQuery = window.location.pathname + '?' + searchParams.toString();
    history.pushState(null, '', newRelativePathQuery);
}

এখন কোয়েরি স্ট্রিংয়ের সম্ভাব্য অস্তিত্ব পরিচালনা করতে আপনার নিজের রেজেেক্স বা যুক্তি লেখার দরকার নেই।

তবে বর্তমানে ব্রাউজার সমর্থনটি পরীক্ষামূলক এবং কেবলমাত্র ক্রোম, ফায়ারফক্স, সাফারি, আইওএস সাফারি, অ্যান্ড্রয়েড ব্রাউজার, অ্যান্ড্রয়েড ক্রোম এবং অপেরার সাম্প্রতিক সংস্করণগুলিতে ব্যবহারের কারণে এটি দুর্বল। পলিফিল ব্যবহার করুন যদি আপনি এটি ব্যবহার করার সিদ্ধান্ত নেন।

আপডেট: আমার আসল উত্তরের পরে ব্রাউজার সমর্থন উন্নত হয়েছে।


পলি ফিল, ভাল নয়, Unable to set property '__URLSearchParams__:0.8503766759030615' of undefined or null reference অর্থাৎ 11 এ আপনি ত্রুটি পান। যদি এটি ফ্যালব্যাক হিসাবে কাজ না করে তবে এটি কোনও পলিফিল নয়।
Val,

6
আপডেট 2019 : ব্রাউজার সমর্থন এখন আইআই এবং কিছু ছোট মোবাইল ব্রাউজার বাদে বেশিরভাগ ব্রাউজারের পক্ষে ভাল। উঙ্গাপের নতুন পলিফিল সহজেই এটি কভার করে: github.com/ungap/url-search-params
ফ্লিয়ন

নির্ভুল উত্তর, তবে ইউআরএল-এ হ্যাশট্যাগ উপস্থিত থাকলে এটি ইউজকেস হ্যান্ডেল করে না। শেষে newRelativePathQueryvar newRelativePathQuery = window.location.pathname + '?' + searchParams.toString() + window.location.hash;
হ্যাশটির

43

@ শৌখিনীর উত্তরের ভিত্তিতে (এবং এখন @ জ_ওয়ালকার_দেব মন্তব্য থেকে এই সংশোধনটি অন্তর্ভুক্ত করা) তবে আমি ইউআরএলটিতে হ্যাশ ট্যাগ সম্পর্কে মন্তব্যটি আমলে নিই:

function updateQueryStringParameter(uri, key, value) {
  var re = new RegExp("([?&])" + key + "=.*?(&|#|$)", "i");
  if (uri.match(re)) {
    return uri.replace(re, '$1' + key + "=" + value + '$2');
  } else {
    var hash =  '';
    if( uri.indexOf('#') !== -1 ){
        hash = uri.replace(/.*#/, '#');
        uri = uri.replace(/#.*/, '');
    }
    var separator = uri.indexOf('?') !== -1 ? "&" : "?";    
    return uri + separator + key + "=" + value + hash;
  }
}

[?|&]রেগেক্সে ঠিক করার জন্য সম্পাদিত যা অবশ্যই [?&]মন্তব্যে নির্দেশিত হওয়া উচিত

সম্পাদনা করুন: পাশাপাশি ইউআরএল প্যারামগুলি অপসারণের বিকল্প বিকল্প সংস্করণ। আমি value === undefinedসরানোর ইঙ্গিত করার উপায় হিসাবে ব্যবহার করেছি । চাইলে value === falseআলাদা আলাদা ইনপুট প্যারাম ব্যবহার করতে পারে।

function updateQueryStringParameter(uri, key, value) {
  var re = new RegExp("([?&])" + key + "=.*?(&|#|$)", "i");
  if( value === undefined ) {
    if (uri.match(re)) {
        return uri.replace(re, '$1$2');
    } else {
        return uri;
    }
  } else {
    if (uri.match(re)) {
        return uri.replace(re, '$1' + key + "=" + value + '$2');
    } else {
    var hash =  '';
    if( uri.indexOf('#') !== -1 ){
        hash = uri.replace(/.*#/, '#');
        uri = uri.replace(/#.*/, '');
    }
    var separator = uri.indexOf('?') !== -1 ? "&" : "?";    
    return uri + separator + key + "=" + value + hash;
  }
  }  
}

Https://jsfiddle.net/bp3tmuxh/1/ এ এটিকে ক্রিয়াতে দেখুন


2
অনেক ক্লিনার কৌনিক ইউআই-রাউটার ব্যবহারকারীদের জন্য এফওয়াইআই "যাদের থাকতে পারে?" পাশাপাশি হ্যাশ। var separatorরিটার্নের উপরে লাইনটি ডানদিকে সরানো "/ অ্যাপ # / দুর্দান্ত? মজা = সত্য" দিয়ে একটি বাগ ঠিক করে। এটি এখনও কোনও সত্যিকারের ক্যোয়ারী স্ট্রিং প্যারাম নেই যদিও বিভাজক হিসাবে একটি "&" চয়ন করবে। কেবল ক্লায়েন্টরা।
j_walker_dev

3
অন্যান্য উত্তরের মন্তব্যে যেমন উল্লেখ করা হয়েছে, [?|&]ঠিক হওয়া উচিত [?&](অন্যথায় মিলবে |)।
Bonger

1
হ্যাঁ, "([?|&])"ভাল না। দয়া করে var re = new RegExp("(?|&)" + key + "=.*?(&|#|$)", "i");var re = new RegExp("([?&])" + key + "=.*?(&|#|$)", "i");
এটির

ঠিক আছে, দুঃখিত, var re = new RegExp("(?|&)" + key + "=.*?(&|#|$)", "i");কাজ করে না, দ্বিতীয়টি কাজ করে
ইয়াকভল

দেখে মনে হচ্ছে এই সংস্করণটি মান বাদ দিয়ে কোনও কোয়েরি স্ট্রিং প্যারামিটার সরানো সমর্থন করে না। আমি কি সঠিক?
jkupczak


11

window.location.search পড়া / লেখা হয়।

তবে - ক্যোয়ারী স্ট্রিংটি সংশোধন করা আপনি যে পৃষ্ঠাটিতে রয়েছেন সেটিকে পুনর্নির্দেশ করবে এবং সার্ভার থেকে একটি রিফ্রেশ তৈরি করবে।

আপনি যা করার চেষ্টা করছেন তা যদি ক্লায়েন্টের সাইড স্টেটকে বজায় রাখা হয় (এবং এটি সম্ভবত বুকমার্ক-সক্ষম করে তোলে), আপনি কোয়েরি স্ট্রিংয়ের পরিবর্তে ইউআরএল হ্যাশটি পরিবর্তন করতে চান, যা আপনাকে একই পৃষ্ঠায় রাখবে (উইন্ডো.লোকেশন)। হ্যাশ পড়া / লেখা হয়)। টুইটার ডটকমের মতো ওয়েব সাইটগুলি এটি করে।

আপনি পিছনের বোতামটিও কাজ করতে চান, আপনাকে জাভাস্ক্রিপ্ট ইভেন্টগুলি হ্যাশ পরিবর্তন ইভেন্টের সাথে আবদ্ধ করতে হবে, এটির জন্য একটি ভাল প্লাগইন হ'ল http://benalman.com/projects/jquery-hashchange-plugin/


4
টুইটার আর হ্যাশ পরিবর্তন করে না! হ্যাশ মারা গেছে, ইতিহাসের এপিআইকে স্বাগতম !
আলবা মেন্ডিজ

এটা মৃত থেকে অনেক দূরে। আমি মনে করি আপনি এমন একটি যাদুকরী স্বপ্নের দেশে বাস করছেন যেখানে লিগ্যাসি ব্রাউজারের সামঞ্জস্যতা কোনও উদ্বেগের নয়। এটি আপনার ক্ষেত্রে হতে পারে তবে এটি আমাদের বাকিদের ক্ষেত্রে (বা বাস্তবে আমাদের বেশিরভাগের) অবশ্যই নয়। সম্ভবত মারা যাওয়া আরও উপযুক্ত ...
হারুন এইচএস

1
এক বছর পরে, দেখে মনে হচ্ছে এটি একমাত্র আধা সাম্প্রতিক ব্রাউজার যা এটি সমর্থন করে না IE 9
ডগলাস S সেশার

11

যদি এটি সেট না করা হয় বা কোনও নতুন মান সহ আপডেট করতে চান তবে আপনি ব্যবহার করতে পারেন:

window.location.search = 'param=value'; // or param=new_value

এটি উপায়, সহজ সরল জাভাস্ক্রিপ্টে।

সম্পাদনা

আপনি jquery ক্যোয়ারী-অবজেক্ট প্লাগইন ব্যবহার করার চেষ্টা করতে পারেন

window.location.search = jQuery.query.set ("পরম", 5);


1
এটি যদিও ইউআরএলে অন্য কোনও ক্যোরিয় স্ট্রিং পরামিতি বজায় রাখবে না।
অপেশাদার

আপনি ঠিক বলেছেন, আমি ক্ষমা চেয়ে নিচ্ছি .. আপডেট হিসাবে, আমি আমার উত্তরে আরও একটি বিকল্প যুক্ত করেছি :)
ট্রেডিব্লিক্স

এটি কাজ করছে না, কারণ এটি কোনও মান পুনরায় সেট করে না। "যুক্ত বা আপডেট করুন"
পাওলো ফ্যালোমো

11

আমি বুঝতে পারি এই প্রশ্নটি পুরানো এবং মৃত্যুর জবাব দেওয়া হয়েছে, তবে এখানে আমার ছুরিকাঘাত। আমি এখানে চক্রটি পুনর্নবীকরণের চেষ্টা করছি কারণ আমি বর্তমানে গৃহীত উত্তর এবং ইউআরএল টুকরোগুলির ভুল ব্যাবহারটি সম্প্রতি একটি প্রকল্পে আমাকে বিট করছি।

ফাংশনটি নীচে রয়েছে। এটি বেশ দীর্ঘ, তবে এটি যতটা সম্ভব স্থিতিস্থাপক হিসাবে তৈরি করা হয়েছিল। আমি এটি সংক্ষিপ্ত / উন্নত করার জন্য পরামর্শ পছন্দ করব। আমি এর জন্য একটি ছোট জেএসফিডাল টেস্ট স্যুট (বা অন্যান্য অনুরূপ ফাংশন) একসাথে রেখেছি । যদি কোনও ফাংশন সেখানে প্রতিটি পরীক্ষায় পাস করতে পারে তবে আমি বলি যে এটি সম্ভবত ভাল।

আপডেট: আমি ইউআরএলগুলি পার্স করার জন্য ডিওএম ব্যবহার করার জন্য একটি দুর্দান্ত ফাংশন পেয়েছি, সুতরাং আমি সেই কৌশলটি এখানে অন্তর্ভুক্ত করেছি। এটি ফাংশনটি খাটো এবং আরও নির্ভরযোগ্য করে তোলে। এই ফাংশনটির লেখকের কাছে প্রপস।

/**
 * Add or update a query string parameter. If no URI is given, we use the current
 * window.location.href value for the URI.
 * 
 * Based on the DOM URL parser described here:
 * http://james.padolsey.com/javascript/parsing-urls-with-the-dom/
 *
 * @param   (string)    uri     Optional: The URI to add or update a parameter in
 * @param   (string)    key     The key to add or update
 * @param   (string)    value   The new value to set for key
 *
 * Tested on Chrome 34, Firefox 29, IE 7 and 11
 */
function update_query_string( uri, key, value ) {

    // Use window URL if no query string is provided
    if ( ! uri ) { uri = window.location.href; }

    // Create a dummy element to parse the URI with
    var a = document.createElement( 'a' ), 

        // match the key, optional square brackets, an equals sign or end of string, the optional value
        reg_ex = new RegExp( key + '((?:\\[[^\\]]*\\])?)(=|$)(.*)' ),

        // Setup some additional variables
        qs,
        qs_len,
        key_found = false;

    // Use the JS API to parse the URI 
    a.href = uri;

    // If the URI doesn't have a query string, add it and return
    if ( ! a.search ) {

        a.search = '?' + key + '=' + value;

        return a.href;
    }

    // Split the query string by ampersands
    qs = a.search.replace( /^\?/, '' ).split( /&(?:amp;)?/ );
    qs_len = qs.length; 

    // Loop through each query string part
    while ( qs_len > 0 ) {

        qs_len--;

        // Remove empty elements to prevent double ampersands
        if ( ! qs[qs_len] ) { qs.splice(qs_len, 1); continue; }

        // Check if the current part matches our key
        if ( reg_ex.test( qs[qs_len] ) ) {

            // Replace the current value
            qs[qs_len] = qs[qs_len].replace( reg_ex, key + '$1' ) + '=' + value;

            key_found = true;
        }
    }   

    // If we haven't replaced any occurrences above, add the new parameter and value
    if ( ! key_found ) { qs.push( key + '=' + value ); }

    // Set the new query string
    a.search = '?' + qs.join( '&' );

    return a.href;
}

2
এটি সত্যিই দুর্দান্ত দেখাচ্ছে, কঠিন পরীক্ষার কেস + ডিওএমকে ইউএসএল পার্সার হিসাবে ব্যবহার করে। আমি দুটি মামলা এটি করেনি যদিও: example.com/?param=val& => example.com/?param=val&&new=key --double & এবং example.com/team => example.com/team?new=key প্রত্যাশিত: দল /? নতুন = কী কিছু পুনর্নির্দেশ / দল? নতুন = কী / টিম / এবং অনুসন্ধানগুলি হারিয়ে গেছে।
তিমার ইভো বাটিস

1
ব্যর্থ পরীক্ষার মামলার জন্য ধন্যবাদ। আমি ফিডাল আপডেট করেছি। যে প্রথম এক কঠিন। এটির জন্য ফাংশনটি ঠিক করবেন কীভাবে কোনও ধারণা? দ্বিতীয়টি কোনও সমস্যা হ্যান্ডল করা উচিত এবং এটি ইতিমধ্যে টেস্ট স্যুটে isেকে রাখা হয়েছে। যদিও আমি আপনাকে বুঝতে পারি না। আপনি যা দেখছেন তা প্রদর্শনের জন্য নিখরচায় পরীক্ষার ঝাঁকুনিটি করুন।
ডোমিনিক পি

আমি কয়েকটি পরীক্ষার কেস যুক্ত করেছি যা আমি দৌড়ে গিয়েছিলাম এবং কর্মক্ষেত্রগুলি পেয়েছি। আমি যতটা সম্ভব ডিওএম ব্যবহার করার চেষ্টা করেছি। একই ডোমেনের মধ্যে সম্পর্কযুক্ত লিঙ্কগুলির জন্যও কাজ করার জন্য প্রাথমিকভাবে আমার এটির প্রয়োজন ছিল। jsfiddle.net/Timar/7sjrhbm3
তিমার ইভো বাটিস

1
@ ব্রাবেড আমি এই পদ্ধতির পছন্দ করি কারণ এটি ব্রাউজারে ভারী উত্তোলন ছেড়ে দেয়। আপনি এখানে প্রচুর উত্তর থেকে দেখতে পাচ্ছেন যে, এই সমস্যাটি মনে হয় তত সহজ নয়। অনেকগুলি কর্নার কেস রয়েছে যেগুলি সমাধানের প্রয়োজন হয়। আপনি যখন ডিওএমটি লাভ করেন তখন তাদের বেশিরভাগই বিনামূল্যে কভার করা হয়।
ডোমিনিক পি

1
@ প্রতিকৃত নিশ্চিত যে উত্তরে আমি সংযুক্ত টেস্ট স্যুটটি একবার দেখে নিই। এখানে অনেকগুলি সমাধান যা ডিওমের উপর নির্ভর করে না এটি ব্যর্থ হয় কারণ তারা তালিকাভুক্ত সমস্ত প্রান্তের ক্ষেত্রে অ্যাকাউন্ট করে না। পড়ার ক্ষেত্রে, নোড.জেএস এর জন্য ইউআরএল মডিউলটি দেখার জন্য এটি শিক্ষামূলক হতে পারে । এটি সরাসরি সম্পর্কিত নয়, তবে এটি আপনাকে ইউআরএল স্ট্রিংয়ের সাথে জড়িত কিছু জটিলতার ধারণা দেয়।
ডোমিনিক পি

9

এখানে আমার পদ্ধতির: দ location.params() ফাংশনটি (নীচে দেখানো হয়েছে) গেটর বা সেটার হিসাবে ব্যবহার করা যেতে পারে। উদাহরণ:

ইউআরএল দেওয়া হল http://example.com/?foo=bar&baz#some-hash,

  1. location.params() সমস্ত ক্যোয়ারী প্যারামিটার সহ একটি বস্তু ফেরত দেবে: {foo: 'bar', baz: true}
  2. location.params('foo') ফিরে আসবে 'bar'
  3. location.params({foo: undefined, hello: 'world', test: true})ইউআরএল পরিবর্তন করতে হবে http://example.com/?baz&hello=world&test#some-hash

এখানে params()ফাংশনটি দেওয়া হয়েছে, যা window.locationবস্তুটিকে optionচ্ছিকভাবে বরাদ্দ করা যেতে পারে ।

location.params = function(params) {
  var obj = {}, i, parts, len, key, value;

  if (typeof params === 'string') {
    value = location.search.match(new RegExp('[?&]' + params + '=?([^&]*)[&#$]?'));
    return value ? value[1] : undefined;
  }

  var _params = location.search.substr(1).split('&');

  for (i = 0, len = _params.length; i < len; i++) {
    parts = _params[i].split('=');
    if (! parts[0]) {continue;}
    obj[parts[0]] = parts[1] || true;
  }

  if (typeof params !== 'object') {return obj;}

  for (key in params) {
    value = params[key];
    if (typeof value === 'undefined') {
      delete obj[key];
    } else {
      obj[key] = value;
    }
  }

  parts = [];
  for (key in obj) {
    parts.push(key + (obj[key] === true ? '' : '=' + obj[key]));
  }

  location.search = parts.join('&');
};

6

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

function setParam(uri, key, val) {
    return uri
        .replace(RegExp("([?&]"+key+"(?=[=&#]|$)[^#&]*|(?=#|$))"), "&"+key+"="+encodeURIComponent(val))
        .replace(/^([^?&]+)&/, "$1?");
}

ডোমিনিক পি দ্বারা বেশ কয়েকটি পরীক্ষার কেস
টিমার আইভো বাটিস

5

আমি জানি এটি বেশ পুরানো তবে আমি এখানে আমার কার্যকরী সংস্করণটি ছড়িয়ে দিতে চাই ।

function addOrUpdateUrlParam(uri, paramKey, paramVal) {
  var re = new RegExp("([?&])" + paramKey + "=[^&#]*", "i");
  if (re.test(uri)) {
    uri = uri.replace(re, '$1' + paramKey + "=" + paramVal);
  } else {
    var separator = /\?/.test(uri) ? "&" : "?";
    uri = uri + separator + paramKey + "=" + paramVal;
  }
  return uri;
}

jQuery(document).ready(function($) {
  $('#paramKey,#paramValue').on('change', function() {
    if ($('#paramKey').val() != "" && $('#paramValue').val() != "") {
      $('#uri').val(addOrUpdateUrlParam($('#uri').val(), $('#paramKey').val(), $('#paramValue').val()));
    }
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input style="width:100%" type="text" id="uri" value="http://www.example.com/text.php">
<label style="display:block;">paramKey
  <input type="text" id="paramKey">
</label>
<label style="display:block;">paramValue
  <input type="text" id="paramValue">
</label>

দ্রষ্টব্য এটি @ ওরেইমুন্ডোর পরিবর্তিত সংস্করণ


1
ডমিনিক পি থেকে জেএসফিডেলের সাথে পরীক্ষিত: FAIL :: উদাহরণ . com ? :: উদাহরণ. com/?& param = নতুন প্রত্যাশিত: উদাহরণ. com /? param = নতুন FAIL :: উদাহরণ. com/? param :: উদাহরণ. com/? param& param= নতুন প্রত্যাশিত: উদাহরণ. com /? param = নতুন FAIL :: example.com/?param=&param2 :: example.com/?param=new&param2 প্রত্যাশিত: example.com/?param=new¶m2 ব্যর্থ :: example.com/?param2=val¶m[]=val : : example.com/?param2=val¶m[]=val¶m=new প্রত্যাশিত: example.com/?param2=val¶m[]=new
Timar ইভো Batis

2

আমার এখান থেকে নেওয়া ("কড়া ব্যবহারের" সাথে সামঞ্জস্যপূর্ণ; সত্যিই jQuery ব্যবহার করে না):

function decodeURIParams(query) {
  if (query == null)
    query = window.location.search;
  if (query[0] == '?')
    query = query.substring(1);

  var params = query.split('&');
  var result = {};
  for (var i = 0; i < params.length; i++) {
    var param = params[i];
    var pos = param.indexOf('=');
    if (pos >= 0) {
        var key = decodeURIComponent(param.substring(0, pos));
        var val = decodeURIComponent(param.substring(pos + 1));
        result[key] = val;
    } else {
        var key = decodeURIComponent(param);
        result[key] = true;
    }
  }
  return result;
}

function encodeURIParams(params, addQuestionMark) {
  var pairs = [];
  for (var key in params) if (params.hasOwnProperty(key)) {
    var value = params[key];
    if (value != null) /* matches null and undefined */ {
      pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value))
    }
  }
  if (pairs.length == 0)
    return '';
  return (addQuestionMark ? '?' : '') + pairs.join('&');
}

//// alternative to $.extend if not using jQuery:
// function mergeObjects(destination, source) {
//   for (var key in source) if (source.hasOwnProperty(key)) {
//     destination[key] = source[key];
//   }
//   return destination;
// }

function navigateWithURIParams(newParams) {
  window.location.search = encodeURIParams($.extend(decodeURIParams(), newParams), true);
}

ব্যবহারের উদাহরণ:

// add/update parameters
navigateWithURIParams({ foo: 'bar', boz: 42 });

// remove parameter
navigateWithURIParams({ foo: null });

// submit the given form by adding/replacing URI parameters (with jQuery)
$('.filter-form').submit(function(e) {
  e.preventDefault();
  navigateWithURIParams(decodeURIParams($(this).serialize()));
});

2

@ লেলেমায়ো যে উত্তর দিয়েছেন তার ভিত্তিতে আমি নিম্নলিখিত সমাধান নিয়ে এসেছি যা যদি হ্যাশ ট্যাগকে অক্ষম করতে দেয় তবে যদি ইচ্ছা হয়:

function updateQueryString(key, value, options) {
    if (!options) options = {};

    var url = options.url || location.href;
    var re = new RegExp("([?&])" + key + "=.*?(&|#|$)(.*)", "gi"), hash;

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

    if ((typeof options.hash === 'undefined' || options.hash) &&
        typeof hash[1] !== 'undefined' && hash[1] !== null)
        url += '#' + hash[1];
    return url;
}

এটিকে কল করুন:

updateQueryString('foo', 'bar', {
    url: 'http://my.example.com#hash',
    hash: false
});

ফলাফল স্বরূপ:

http://my.example.com?foo=bar

স্টাইলিস্ট কুইবল: typeof value !== 'undefined' && value !== nullআরও স্পষ্ট, তবে value != nullএকই জিনিসটির অর্থ এবং আরও সংক্ষিপ্ত।
এপসিলন

2

এখানে একটি সংক্ষিপ্ত সংস্করণ যা যত্ন নেয়

  • প্রদত্ত প্যারামিটার সহ বা ছাড়াই ক্যোয়ারী
  • একাধিক প্যারামিটার মান সহ ক্যোয়ারী
  • হ্যাশযুক্ত ক্যোয়ারী

কোড:

var setQueryParameter = function(uri, key, value) {
  var re = new RegExp("([?&])("+ key + "=)[^&#]*", "g");
  if (uri.match(re)) 
    return uri.replace(re, '$1$2' + value);

  // need to add parameter to URI
  var paramString = (uri.indexOf('?') < 0 ? "?" : "&") + key + "=" + value;
  var hashIndex = uri.indexOf('#');
  if (hashIndex < 0)
    return uri + paramString;
  else
    return uri.substring(0, hashIndex) + paramString + uri.substring(hashIndex);
}

Regex বিবরণ পাওয়া যাবে এখানে

দ্রষ্টব্য : এই সমাধানটি @ মাত্তুর উত্তরের উপর ভিত্তি করে তৈরি হয়েছে তবে অনেকগুলি উন্নতি হয়েছে।


2

কোড যা ES6 এবং jQuery ব্যবহার করে বিদ্যমান url এ পরামিতিগুলির একটি তালিকা যুক্ত করে:

class UrlBuilder {
    static appendParametersToUrl(baseUrl, listOfParams) {

        if (jQuery.isEmptyObject(listOfParams)) {
            return baseUrl;
        }

        const newParams = jQuery.param(listOfParams);

        let partsWithHash = baseUrl.split('#');
        let partsWithParams = partsWithHash[0].split('?');

        let previousParams = '?' + ((partsWithParams.length === 2) ? partsWithParams[1] + '&' : '');
        let previousHash = (partsWithHash.length === 2) ? '#' + partsWithHash[1] : '';

        return partsWithParams[0] + previousParams + newParams + previousHash;
    }
}

যেখানে তালিকার অফারমগুলি পছন্দ

const listOfParams = {
    'name_1': 'value_1',
    'name_2': 'value_2',
    'name_N': 'value_N',
};

ব্যবহারের উদাহরণ:

    UrlBuilder.appendParametersToUrl(urlBase, listOfParams);

দ্রুত পরীক্ষা:

    url = 'http://hello.world';
    console.log('=> ', UrlParameters.appendParametersToUrl(url, null));
    // Output:  http://hello.world

    url = 'http://hello.world#h1';
    console.log('=> ', UrlParameters.appendParametersToUrl(url, null));
    // Output:  http://hello.world#h1

    url = 'http://hello.world';
    params = {'p1': 'v1', 'p2': 'v2'};
    console.log('=> ', UrlParameters.appendParametersToUrl(url, params));
    // Output: http://hello.world?p1=v1&p2=v2

    url = 'http://hello.world?p0=v0';
    params = {'p1': 'v1', 'p2': 'v2'};
    console.log('=> ', UrlParameters.appendParametersToUrl(url, params));
    // Output: http://hello.world?p0=v0&p1=v1&p2=v2

    url = 'http://hello.world#h1';
    params = {'p1': 'v1', 'p2': 'v2'};
    console.log('=> ', UrlParameters.appendParametersToUrl(url, params));
   // Output: http://hello.world?p1=v1&p2=v2#h1

    url = 'http://hello.world?p0=v0#h1';
    params = {'p1': 'v1', 'p2': 'v2'};
    console.log('=> ', UrlParameters.appendParametersToUrl(url, params));
    // Output: http://hello.world?p0=v0&p1=v1&p2=v2#h1

1

নিয়মিত অভিব্যক্তি ব্যবহার না করে একটি পৃথক পদ্ধতি । ইউআরএল শেষে 'হ্যাশ' অ্যাঙ্কর পাশাপাশি একাধিক প্রশ্ন চিহ্ন চার্টার (?) সমর্থন করে। নিয়মিত প্রকাশের পদ্ধতির চেয়ে কিছুটা দ্রুত হওয়া উচিত।

function setUrlParameter(url, key, value) {
  var parts = url.split("#", 2), anchor = parts.length > 1 ? "#" + parts[1] : '';
  var query = (url = parts[0]).split("?", 2);
  if (query.length === 1) 
    return url + "?" + key + "=" + value + anchor;

  for (var params = query[query.length - 1].split("&"), i = 0; i < params.length; i++)
    if (params[i].toLowerCase().startsWith(key.toLowerCase() + "="))
      return params[i] = key + "=" + value, query[query.length - 1] = params.join("&"), query.join("?") + anchor;

  return url + "&" + key + "=" + value + anchor
}

1

Jquery এর উপর ভিত্তি করে ইউআরএল থেকে ক্যোরি স্ট্রিং প্যারামিটার যুক্ত, সরিয়ে এবং সংশোধন করতে এই ফাংশনটি ব্যবহার করুন

/**
@param String url
@param object param {key: value} query parameter
*/
function modifyURLQuery(url, param){
    var value = {};

    var query = String(url).split('?');

    if (query[1]) {
        var part = query[1].split('&');

        for (i = 0; i < part.length; i++) {
            var data = part[i].split('=');

            if (data[0] && data[1]) {
                value[data[0]] = data[1];
            }
        }
    }

    value = $.extend(value, param);

    // Remove empty value
    for (i in value){
        if(!value[i]){
            delete value[i];
        }
    }

    // Return url with modified parameter
    if(value){
        return query[0] + '?' + $.param(value);
    } else {
        return query[0];
    }
}

নতুন যুক্ত করুন এবং ইউআরএলে বিদ্যমান প্যারামিটারটি সংশোধন করুন

var new_url = modifyURLQuery("http://google.com?foo=34", {foo: 50, bar: 45});
// Result: http://google.com?foo=50&bar=45

বিদ্যমান সরান

var new_url = modifyURLQuery("http://google.com?foo=50&bar=45", {bar: null});
// Result: http://google.com?foo=50

1

ব্যবহার করে jQueryআমরা নীচের মত করতে পারেন

var query_object = $.query_string;
query_object["KEY"] = "VALUE";
var new_url = window.location.pathname + '?'+$.param(query_object)

পরিবর্তনশীল মধ্যে new_url আমাদের কাছে নতুন ক্যোয়ারী প্যারামিটার থাকবে।

তথ্যসূত্র: http://api.jquery.com/jquery.param/


0

window.location.searchগাল এবং ট্রেডিব্লিক্সের পরামর্শ অনুসারে সংশোধন করার জন্য একটি কোড উদাহরণ দেওয়ার জন্য :

var qs = window.location.search || "?";
var param = key + "=" + value; // remember to URI encode your parameters
if (qs.length > 1) {
    // more than just the question mark, so append with ampersand
    qs = qs + "&";
}
qs = qs + param;
window.location.search = qs;

0

একটি নির্দিষ্ট ক্যোয়ারী স্ট্রিংটি খুঁজে পেতে এবং এর মান প্রতিস্থাপন করতে জাভা স্ক্রিপ্ট কোড

('input.letter').click(function () {
                //0- prepare values
                var qsTargeted = 'letter=' + this.value; //"letter=A";
                var windowUrl = '';
                var qskey = qsTargeted.split('=')[0];
                var qsvalue = qsTargeted.split('=')[1];
                //1- get row url
                var originalURL = window.location.href;
                //2- get query string part, and url
                if (originalURL.split('?').length > 1) //qs is exists
                {
                    windowUrl = originalURL.split('?')[0];
                    var qs = originalURL.split('?')[1];
                    //3- get list of query strings
                    var qsArray = qs.split('&');
                    var flag = false;
                    //4- try to find query string key
                    for (var i = 0; i < qsArray.length; i++) {
                        if (qsArray[i].split('=').length > 0) {
                            if (qskey == qsArray[i].split('=')[0]) {
                                //exists key
                                qsArray[i] = qskey + '=' + qsvalue;
                                flag = true;
                                break;
                            }
                        }
                    }
                    if (!flag)//   //5- if exists modify,else add
                    {
                        qsArray.push(qsTargeted);
                    }
                    var finalQs = qsArray.join('&');
                    //6- prepare final url
                    window.location = windowUrl + '?' + finalQs;
                }
                else {
                    //6- prepare final url
                    //add query string
                    window.location = originalURL + '?' + qsTargeted;
                }
            })
        });

0

হ্যাঁ আমার একটি সমস্যা ছিল যেখানে আমার ক্যোরিস্ট্রিংটি উপচে পড়বে এবং সদৃশ হবে তবে এটি আমার নিজস্ব আলস্যতার কারণে। সুতরাং আমি কিছুটা খেলেছি এবং কিছু জেএস জ্যাকেই (সত্যই সিজল) এবং সি # ম্যাজিক কাজ করেছি।

সুতরাং আমি কেবল বুঝতে পেরেছি যে সার্ভারটি পাস করা মানগুলি সম্পন্ন করার পরে, মানগুলি আর কিছু যায় আসে না, কোনও পুনরায় ব্যবহার নেই, ক্লায়েন্ট যদি একই জিনিসটি করতে চান তবে এটি সর্বদা একটি নতুন অনুরোধ হবে, এমনকি যদি এটি একই পরামিতি পাস হচ্ছে। এবং সমস্ত ক্লায়েন্টকে ধন্যবাদ দেয়, তাই কিছু ক্যাচিং / কুকিজ ইত্যাদি সেই ক্ষেত্রে দুর্দান্ত হতে পারে।

জাতীয়:

$(document).ready(function () {
            $('#ser').click(function () {
                SerializeIT();
            });
            function SerializeIT() {
                var baseUrl = "";
                baseUrl = getBaseUrlFromBrowserUrl(window.location.toString());
                var myQueryString = "";
                funkyMethodChangingStuff(); //whatever else before serializing and creating the querystring
                myQueryString = $('#fr2').serialize();
                window.location.replace(baseUrl + "?" + myQueryString);
            }
            function getBaseUrlFromBrowserUrl(szurl) {
                return szurl.split("?")[0];
            } 
            function funkyMethodChangingStuff(){
               //do stuff to whatever is in fr2
            }
        });

এইচটিএমএল:

<div id="fr2">
   <input type="text" name="qURL" value="http://somewhere.com" />
   <input type="text" name="qSPart" value="someSearchPattern" />
</div>
<button id="ser">Serialize! and go play with the server.</button>

সি #:

    using System.Web;
    using System.Text;
    using System.Collections.Specialized;

    public partial class SomeCoolWebApp : System.Web.UI.Page
    {
        string weburl = string.Empty;
        string partName = string.Empty;

        protected void Page_Load(object sender, EventArgs e)
        {
            string loadurl = HttpContext.Current.Request.RawUrl;
            string querySZ = null;
            int isQuery = loadurl.IndexOf('?');
            if (isQuery == -1) { 
                //If There Was no Query
            }
            else if (isQuery >= 1) {
                querySZ = (isQuery < loadurl.Length - 1) ? loadurl.Substring(isQuery + 1) : string.Empty;
                string[] getSingleQuery = querySZ.Split('?');
                querySZ = getSingleQuery[0];

                NameValueCollection qs = null;
                qs = HttpUtility.ParseQueryString(querySZ);

                weburl = qs["qURL"];
                partName = qs["qSPart"];
                //call some great method thisPageRocks(weburl,partName); or whatever.
          }
      }
  }

ঠিক আছে সমালোচনা স্বাগত ( এটি যদি কিছুটা সহায়তা করে তবে হ্যাপি কোডিং thumb

কোনও অনুলিপি নেই, প্রতিটি অনুরোধ যেমনটি আপনি এটি সংশোধন করেছেন তেমন অনন্য, এবং এটি কীভাবে কাঠামোবদ্ধ হয়েছে তার কারণে, ডোমটির সাথে আরও প্রশ্নগুলির গতিশীলতা যুক্ত করা সহজ।


0

অ্যাঙ্কর এইচটিএমএল উপাদানটির ইনবিল্ট বৈশিষ্ট্য ব্যবহার করে এখানে একটি বিকল্প পদ্ধতি রয়েছে:

  • বহু-মূল্যবান পরামিতিগুলি পরিচালনা করে।
  • # টুকরাটি পরিবর্তন করা বা কোয়েরি স্ট্রিং ছাড়া অন্য কোনও কিছুর ঝুঁকি নেই।
  • পড়া কি একটু সহজ হতে পারে? তবে এটি দীর্ঘ।

    var a = document.createElement('a'),

	getHrefWithUpdatedQueryString = function(param, value) {
	    return updatedQueryString(window.location.href, param, value);
	},

	updatedQueryString = function(url, param, value) {
	    /*
	     A function which modifies the query string 
             by setting one parameter to a single value.

	     Any other instances of parameter will be removed/replaced.
	     */
	    var fragment = encodeURIComponent(param) + 
                           '=' + encodeURIComponent(value);

	    a.href = url;

	    if (a.search.length === 0) {
		a.search = '?' + fragment;
	    } else {
		var didReplace = false,
		    // Remove leading '?'
		    parts = a.search.substring(1)
		// Break into pieces
			.split('&'),

		    reassemble = [],
		    len = parts.length;

		for (var i = 0; i < len; i++) {
		    
		    var pieces = parts[i].split('=');
		    if (pieces[0] === param) {
			if (!didReplace) {
			    reassemble.push('&' + fragment);
			    didReplace = true;
			}
		    } else {
			reassemble.push(parts[i]);
		    }
		}

		if (!didReplace) {
		    reassemble.push('&' + fragment);
		}

		a.search = reassemble.join('&');
	    }

	    return a.href;
	};


0

যদি আপনি একবারে একাধিক পরামিতি সেট করতে চান:

function updateQueryStringParameters(uri, params) {
    for(key in params){
      var value = params[key],
          re = new RegExp("([?&])" + key + "=.*?(&|$)", "i"),
          separator = uri.indexOf('?') !== -1 ? "&" : "?";
      if (uri.match(re)) {
        uri = uri.replace(re, '$1' + key + "=" + value + '$2');
      }
      else {
        uri = uri + separator + key + "=" + value;
      }
    }
    return uri;
}

@ অপেশাদার হিসাবে একই ফাংশন

যদি jslint আপনাকে একটি ত্রুটি দেয় তবে লুপের জন্য এটি যুক্ত করুন

if(params.hasOwnProperty(key))

হ্যাশগুলি পরিচালনা করে না, বা প্যারামিটারগুলি একটি মান ( http://abc.def/?a&b&c) নির্ধারিত নয় ।
অ্যাডাম লেগেট

0

এই পৃষ্ঠায় অনেক বিশ্রী এবং অপ্রয়োজনীয় জটিল উত্তর রয়েছে। সর্বোচ্চ রেট দেওয়া একটি, @ অপেশাদার এর, বেশ ভাল, যদিও এটি রেজিপ্লেসে কিছুটা অপ্রয়োজনীয় ফ্লাফ রয়েছে। এখানে ক্লিনার RegExp এবং একটি ক্লিনার replaceকল সহ কিছুটা আরও অনুকূল সমাধান রয়েছে :

function updateQueryStringParamsNoHash(uri, key, value) {
  var re = new RegExp("([?&])" + key + "=[^&]*", "i");
  return re.test(uri)
       ? uri.replace(re, '$1' + key + "=" + value)
       : uri + separator + key + "=" + value
  ;
}

যুক্ত বোনাস হিসাবে, যদি uriস্ট্রিং না হয়, আপনি কল করার চেষ্টা করার জন্য matchবা replaceএমন কোনও কিছু যা ত্রুটিগুলি বাস্তবায়িত করতে পারে না ত্রুটিগুলি পাবেন না ।

এবং যদি আপনি কোনও হ্যাশের ক্ষেত্রে হ্যান্ডেল করতে চান (এবং আপনি ইতিমধ্যে সঠিকভাবে ফর্ম্যাট করা এইচটিএমএল জন্য একটি চেক করেছেন), আপনি একই যুক্তিযুক্ত একটি নতুন ফাংশন লেখার পরিবর্তে বিদ্যমান ফাংশনটি উত্তোলন করতে পারেন:

function updateQueryStringParams(url, key, value) {
    var splitURL = url.split('#');
    var hash = splitURL[1];
    var uri = updateQueryStringParamsNoHash(splitURL[0]);
    return hash == null ? uri : uri + '#' + hash;
}

অথবা আপনি @ অ্যাডামের অন্যথায় দুর্দান্ত উত্তরে কিছুটা পরিবর্তন করতে পারেন:

function updateQueryStringParameter(uri, key, value) {
  var re = new RegExp("([?&])" + key + "=[^&#]*", "i");
  if (re.test(uri)) {
    return uri.replace(re, '$1' + key + "=" + value);
  } else {
    var matchData = uri.match(/^([^#]*)(#.*)?$/);
    var separator = /\?/.test(uri) ? "&" : "?";    
    return matchData[0] + separator + key + "=" + value + (matchData[1] || '');
  }
}

2
/^([^#]*)(#.*)?$/ Var matchData = uri.match (এই শেষ ফাংশনে একটি অনুপস্থিত বন্ধনী হয়
জ্যামার

separatorসংজ্ঞায়িত করা হয় না updateQueryStringParamsNoHash। ইন updateQueryStringParameter, আপনি যে প্যারামিটারটি প্রতিস্থাপন করছেন তার কোনও মান (যেমন http://abc.def/?a&b&c) নির্ধারিত না হলে সবকিছু ভেঙে যায় ।
অ্যাডাম লেগেট

0

এটি উদ্দেশ্য পূরণ করতে হবে:

function updateQueryString(url, key, value) {
    var arr =  url.split("#");
    var url = arr[0];
    var fragmentId = arr[1];
    var updatedQS = "";
    if (url.indexOf("?") == -1) {
        updatedQS = encodeURIComponent(key) + "=" + encodeURIComponent(value);
    }
    else {
        updatedQS = addOrModifyQS(url.substring(url.indexOf("?") + 1), key, value); 
    }
    url = url.substring(0, url.indexOf("?")) + "?" + updatedQS;
    if (typeof fragmentId !== 'undefined') {
        url = url + "#" + fragmentId;
    }
    return url;
}

function addOrModifyQS(queryStrings, key, value) {
    var oldQueryStrings = queryStrings.split("&");
    var newQueryStrings = new Array();
    var isNewKey = true;
    for (var i in oldQueryStrings) {
        var currItem = oldQueryStrings[i];
        var searchKey = key + "=";
        if (currItem.indexOf(searchKey) != -1) {
            currItem = encodeURIComponent(key) + "=" + encodeURIComponent(value);
            isNewKey = false;
        }
        newQueryStrings.push(currItem);
    }
    if (isNewKey) {
        newQueryStrings.push(encodeURIComponent(key) + "=" + encodeURIComponent(value));
    }
    return newQueryStrings.join("&");
}   
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.