javascript - webcoachbd - জাভাস্ক্রিপ্ট লুপ




কিভাবে আমি জাভাস্ক্রিপ্ট মধ্যে অনুসন্ধান স্ট্রিং মান পেতে পারি? (20)

JQuery (বা ছাড়া) মাধ্যমে ক্যোয়ারী স্ট্রিং মান পুনরুদ্ধারের একটি প্লাগইন-কম উপায় আছে?

যদি তাই হয়, কিভাবে? যদি না হয়, একটি প্লাগইন যা করতে পারে?


ES2015 (ES6)

getQueryStringParams = query => {
    return query
        ? (/^[?#]/.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('&'));

একটি ইউআরএল মত ?topic=123&name=query+string , নিম্নলিখিত ফিরে আসবে:

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

গুগল পদ্ধতি

গুগলের কোড 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
}

এটা obfuscated হয়, কিন্তু এটা বোধগম্য। এটি কাজ করে না কারণ কিছু ভেরিয়েবল অনির্ধারিত হয়।

তারা ইউআরএল থেকে প্যারামিটার দেখতে শুরু ? এবং হ্যাশ # থেকেও। তারপর প্রতিটি প্যারামিটারের জন্য তারা সমান চিহ্ন বিভাজিত হয় b[f][p]("=") (যা indexOf মত দেখাচ্ছে, তারা কী / মান পেতে গৃহস্থালিটির অবস্থান ব্যবহার করে)। এটি বিভক্ত হওয়ার পরে তারা প্যারামিটারটির মূল্য আছে কি না তা পরীক্ষা করে দেখুন, যদি এটির পরে তারা মানটি সঞ্চয় করে তবে অন্যথায় তারা অবিরত থাকে।

অবশেষে বস্তু d ফিরে আসছে, escaping পরিচালনা এবং + চিহ্ন। এই বস্তুটি আমার মতই, এটি একই আচরণ।

একটি 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));

পারফরম্যান্স পরীক্ষা ( jsPerf পদ্ধতির বিরুদ্ধে বিভক্ত পদ্ধতি) ( jsPerf )

প্রস্তুতি কোড: পদ্ধতি ঘোষণা

বিভক্ত পরীক্ষা কোড

var qs = window.GetQueryString(query);

var search = qs["q"];
var value = qs["value"];
var undef = qs["undefinedstring"];

Regex পরীক্ষা কোড

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

উইন্ডোজ সার্ভার 2008 R2 / 7 x64 এ ফায়ারফক্স 4.0 x86 এ পরীক্ষা করা হচ্ছে

  • বিভক্ত পদ্ধতি : 144,780 ± 2.17% দ্রুততম
  • Regex পদ্ধতি : 13,891 ± 0.85% | 90% ধীর

URLSearchParams

ফায়ারফক্স 44+, অপেরা 36+, এজ 17+, সাফারি 10.3+ এবং ক্রোম 49+ URLSearchParams API সমর্থন করে:

IE এর স্থিতিশীল সংস্করণগুলির জন্য একটি গুগল-প্রস্তাবিত URL অনুসন্ধানের প্যারামিফ রয়েছে

এটি W3C দ্বারা মানানসই নয়, তবে এটি হটডাব্লিউটিএর একটি জীবন্ত মান।

আপনি এটি অবস্থান ব্যবহার করতে পারেন, কিন্তু আপনি অপসারণ করতে হবে ? প্রশ্ন চিহ্ন (উদাহরণস্বরূপ, .slice(1) ):

let params = new URLSearchParams(location.search);

অথবা

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

অথবা অবশ্যই কোন ইউআরএল:

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

ইউআরএল অবজেক্টের সাহায্যে আপনি .searchParams সম্পত্তিটি ব্যবহার .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) {}

একটি রেফারেন্স বাস্তবায়ন এবং একটি নমুনা পৃষ্ঠা নিরীক্ষণ এবং পরীক্ষার জন্য উপলব্ধ।


Snipplr.com এ রোশাম্বো একটি সহজ স্ক্রিপ্ট আছে যা বর্ণিত এইটি অর্জন করতে jQuery এর সাথে URL প্যারামিটারগুলি পান উন্নত । তার স্ক্রিপ্ট দিয়ে আপনি সহজে আপনি চান মাত্র পরামিতি টান পেতে।

এখানে জিস্ট:

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

তারপর শুধু ক্যোয়ারী স্ট্রিং থেকে আপনার পরামিতি পেতে।

তাই যদি URL / query স্ট্রিং xyz.com/index.html?lang=de

শুধু var langval = $.urlParam('lang'); , এবং আপনি এটা পেয়েছেন।

UZBEKJON এর পাশাপাশি একটি দুর্দান্ত ব্লগ পোস্ট রয়েছে, ইউআরএল প্যারামিটার এবং jQuery এর সাথে মানগুলি পান


আপনি যদি jQuery ব্যবহার করেন তবে আপনি লাইব্রেরি ব্যবহার করতে পারেন যেমন jQuery বিবিকিউ: ব্যাক বোতাম এবং ক্যোয়ারি লাইব্রেরি

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

আপনি কেবল সাধারণ জাভাস্ক্রিপ্ট ব্যবহার করতে চান, আপনি ব্যবহার করতে পারেন ...

var getParamValue = (function() {
    var params;
    var resetParams = function() {
            var query = window.location.search;
            var regex = /[?&;](.+?)=([^&;]+)/g;
            var match;

            params = {};

            if (query) {
                while (match = regex.exec(query)) {
                    params[match[1]] = decodeURIComponent(match[2]);
                }
            }    
        };

    window.addEventListener
    && window.addEventListener('popstate', resetParams);

    resetParams();

    return function(param) {
        return params.hasOwnProperty(param) ? params[param] : null;
    }

})();​

নতুন এইচটিএমএল ইতিহাস API এবং বিশেষ করে history.pushState() এবং history.replaceState() , URL পরিবর্তন করতে পারে যা পরামিতিগুলির ক্যাশে এবং তাদের মানগুলি অকার্যকর করবে।

এই সংস্করণ ইতিহাস পরিবর্তন প্রতিটি সময় পরামিতি এর অভ্যন্তরীণ ক্যাশ আপডেট হবে।


আমি রায়ান ফেলানের সমাধান পছন্দ করি। কিন্তু আমি কি এর জন্য jQuery প্রসারিত কোন বিন্দু দেখতে পাচ্ছি না? JQuery কার্যকারিতা কোন ব্যবহার নেই।

অন্যদিকে আমি গুগল ক্রোমে বিল্ট-ইন ফাংশন পছন্দ করি: 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];
  };
}

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


এখানে পোস্ট করা সমাধান কিছু অকার্যকর। প্রতিটি সময় স্ক্রিপ্টটিকে প্যারামিটারটি অ্যাক্সেস করার জন্য নিয়মিত অভিব্যক্তি অনুসন্ধানটি পুনরাবৃত্তি করা একেবারে অপ্রয়োজনীয়, একটি একক ফাংশনকে একটি অ্যাসোসিয়েটেভ-অ্যারের শৈলী বস্তুর মধ্যে বিভক্ত করার জন্য যথেষ্ট। আপনি যদি এইচটিএমএল 5 ইতিহাস এপিআই এর সাথে কাজ না করেন তবে এটি প্রতি পৃষ্ঠায় লোড একবারের জন্য প্রয়োজন। এখানে অন্যান্য পরামর্শগুলি URL সঠিকভাবে ডিকোড করতে ব্যর্থ হয়েছে।

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

উদাহরণ querystring:

?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

এটি সহজেই অ্যারে-স্টাইল অনুসন্ধান স্ট্রিংগুলি হ্যান্ডেল করার জন্য উন্নত করা যেতে পারে। এর একটি উদাহরণ here , কিন্তু যেহেতু অ্যারে-স্টাইল প্যারামিটারগুলি RFC 3986 এ সংজ্ঞায়িত করা হয় না তাই আমি এই উত্তরটি সোর্স কোড দিয়ে দূষিত করব না। একটি "দূষিত" সংস্করণ আগ্রহী যারা জন্য, ক্যাম্পবেল এর উত্তর নীচের দিকে তাকান

এছাড়াও, মতামত হিসাবে নির্দিষ্ট ; key=value জোড়া জন্য একটি আইনি delimiter key=value । এটি হ্যান্ডেল করার জন্য আরো জটিল regex প্রয়োজন হবে ; বা & , যা আমি মনে করি অপ্রয়োজনীয় কারণ এটি বিরল যে ; ব্যবহার করা হয় এবং আমি উভয় ব্যবহার করা হবে যে আরো সম্ভাবনাহীন বলতে হবে। যদি আপনি সমর্থন প্রয়োজন ; পরিবর্তে & , শুধু regex তাদের swap।

আপনি সার্ভার-পার্শ্ব প্রিপোকাসিং ভাষাটি ব্যবহার করছেন, তবে আপনার জন্য ভারী উত্তোলন করতে আপনি তার স্থানীয় JSON ফাংশনগুলি ব্যবহার করতে চাইতে পারেন। উদাহরণস্বরূপ, পিএইচপি তে আপনি লিখতে পারেন:

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

অনেক সহজ!


এন্ডি ই এর সম্পূর্ণ সমাধানটি একটি পূর্ণাঙ্গ জাগ্রত প্লাগিনে তৈরি করার জন্য এখানে আমার স্ট্যাব রয়েছে:

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

দুই ভুবনের সেরা!


পিএইচপি $_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 get(n) {
    var half = location.search.split(n + '=')[1];
    return half !== undefined ? decodeURIComponent(half.split('&')[0]) : null;
}

আমি সব আগের এবং আরো সম্পূর্ণ উত্তর পড়া ছিল। কিন্তু আমি মনে করি এটি সহজ এবং দ্রুত পদ্ধতি। আপনি এই jsPerf benchmark চেক করতে পারেন

রূপের মন্তব্যের সমস্যা সমাধানের জন্য নিচের দুইটি লাইন পরিবর্তন করে একটি শর্তযুক্ত বিভাজন যুক্ত করুন। কিন্তু পরম সঠিকতা মানে এখন এটি jsPerf চেয়ে ধীরে ধীরে ( 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;

সরল জাভাস্ক্রিপ্ট কোড এ সহজ রাখুন:

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

আপডেট: সেপ্টেম্বর -2018

আপনি URLSearchParams ব্যবহার করতে পারেন যা সহজ এবং ভাল ব্রাউজার সমর্থন আছে

const urlParams = new URLSearchParams(window.location.search);
const myParam = urlParams.get('myParam');

আসল

আপনি যে উদ্দেশ্যে 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 GET অনুসন্ধান কীগুলির আনুষ্ঠানিক অবস্থান
দ্রষ্টব্য: ফাংশন কেস সংবেদনশীল। যদি আপনি কেস- অসংবেদক প্যারামিটার নামটি পছন্দ করেন তবে 'I' সংশোধনকারীকে RegExp এ যোগ করুন

এটি একই আপডেটটি আরও সংক্ষিপ্তভাবে অর্জন করতে নতুন URLSearchParamams স্পেসের উপর ভিত্তি করে একটি আপডেট। নীচের " URLSearchParams " শিরোনাম উত্তর দেখুন।


Roshambo jQuery পদ্ধতি ডিকোড ইউআরএল যত্ন নিচ্ছে না

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

শুধু ফিরে বিবৃতি যোগ করার সময় যে ক্ষমতা যোগ করা

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

এখন আপনি আপডেট তালিকা খুঁজে পেতে পারেন:

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

উপরের প্রশ্নের উত্তরটি হল যে এটি # পরে স্থাপিত সমর্থিত প্যারামিটার নয়, তবে মাঝে মাঝে এই মানটি পেতে এটিও প্রয়োজন।

আমি একটি হ্যাশ সাইন সহ একটি পূর্ণ ক্যোয়ারী স্ট্রিং বিশ্লেষণ করতে উত্তরটি সংশোধন করেছি:

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

কোড গলফ:

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

এটা প্রদর্শন করুন!

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

আমার ম্যাক উপর: test.htm?i=can&has=cheezburgerপ্রদর্শন

0:can
1:cheezburger
i:can
has:cheezburger

আমরা শুধু arg.js ছেড়ে arg.js , এই প্রকল্পটি একবার এবং সব সমস্যার সমাধান করার লক্ষ্যে একটি প্রকল্প। এটা ঐতিহ্যগতভাবে এত কঠিন হয়েছে কিন্তু এখন আপনি করতে পারেন:

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

অথবা সম্পূর্ণ প্রচুর পেয়েছি:

var params = Arg.all();

এবং যদি আপনি এর মধ্যে পার্থক্য সম্পর্কে যত্ন করেন ?query=trueএবং #hash=trueতারপরে আপনি Arg.query()এবং Arg.hash()পদ্ধতিগুলি ব্যবহার করতে পারেন ।


আমি এই এক পছন্দ (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;
}

আমার জন্য মহান কাজ করে।


এখানে এই চমৎকার উত্তর আমার সম্পাদনা - মান ছাড়া কী সঙ্গে কোয়েরি স্ট্রিং পার্স যোগ করার ক্ষমতা সঙ্গে।

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('&'));

গুরুত্বপূর্ণ! শেষ লাইন যে ফাংশন জন্য পরামিতি ভিন্ন। এটি কেবলমাত্র একটি উদাহরণ যা এটিতে একটি নির্বিচারে URL পাস করতে পারে। বর্তমান URL টি পার্স করতে আপনি ব্রুনোর উত্তর থেকে শেষ লাইনটি ব্যবহার করতে পারেন।

তাই ঠিক কি পরিবর্তন? ইউআরএল http://sb.com/reg/step1?param=ফলাফল একই হবে। কিন্তু ইউআরএলের সাথে http://sb.com/reg/step1?paramব্রুনোর সমাধান কী ছাড়াই একটি বস্তু ফিরিয়ে দেয়, যখন খনি কী paramএবং undefinedমূল্যের সাথে একটি বস্তু প্রদান করে ।


এখানে এন্ডি ই এর লিঙ্কযুক্ত "হ্যান্ডেল অ্যারে-স্টাইল ক্যোয়ারী স্ট্রিং" বর্ধিত সংস্করণ। একটি বাগ সংশোধন করা হয়েছে ( ?key=1&key[]=2&key[]=3; 1হারিয়ে গেছে এবং প্রতিস্থাপিত হয়েছে [2,3]), কিছু ক্ষুদ্র কর্মক্ষমতা উন্নতি (মানগুলির পুনঃ-ডিকোডিং, "[" অবস্থান, ইত্যাদি পুনঃসংখ্যা) এবং অনেকগুলি সংশোধন করা হয়েছে (কার্যকরী, সমর্থন ?key=1&key=2, ;ডেলিমিটারগুলির জন্য সমর্থন ) । আমি বিরক্তিকর সংক্ষিপ্ত ভেরিয়েবল বামে, কিন্তু মন্তব্যগুলি তাদের পাঠযোগ্য করার জন্য প্রচুর পরিমাণে যোগ করা হয়েছে (ওহ, এবং vস্থানীয় ক্রিয়াকলাপগুলির মধ্যে পুনরায় ব্যবহার করা হয়েছে, দুঃখিত যে বিভ্রান্তিকর;)।

এটি নিম্নলিখিত querystring হ্যান্ডেল হবে ...

? পরীক্ষার = হ্যালো & ব্যক্তি = neek & ব্যক্তি [] = জেফ ও ব্যক্তি [] = জিম & ব্যক্তি [অতিরিক্ত] = জন & test3 নামক & nocache = 1398914891264

... এটি এমন একটি বস্তু তৈরি করছে যা দেখে মনে হচ্ছে ...

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

আপনি উপরের দিকে দেখতে পারেন, এই সংস্করণটি "বিকৃত" অ্যারের কিছু পরিমাপ পরিচালনা করে - person=neek&person[]=jeff&person[]=jimঅথবা person=neek&person=jeff&person=jimযেমন কী শনাক্তযোগ্য এবং বৈধ (অন্তত ডটনেটের নাম NameValueCollection.Add ) যোগ করুন:

যদি নির্দিষ্ট কী ইতিমধ্যে লক্ষ্য করা NameValueCollection ইনস্ট্যান্সের মধ্যে বিদ্যমান থাকে, তবে নির্দিষ্ট মানটি বিদ্যমান মানচিত্রে বিভাজিত তালিকাটিতে "মান 1, মান 2, মান 3" ফর্মের মানগুলির সাথে যোগ করা হয়।

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

কোড:

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

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

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

এবং এইভাবে আপনি এই ফাংশনটি ইউআরএলটি অনুমান করে ব্যবহার করতে পারেন

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

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







query-string