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


2697

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

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


আমি jQuery-Plugin - getUllParam (সংস্করণ 2) এ বর্ণিত getUllParam প্লাগইনটি ব্যবহার করি ।
কোমা

69
RegEx ছাড়াই একটি সরল জাভাস্ক্রিপ্ট সমাধান: css-tricks.com/snippets/javascript/get-url-variables
লরেঞ্জো

6
যদিও jQuery প্রয়োজন হয় না তার দুর্দান্ত পর্যবেক্ষণের কারণে প্রশ্নের শীর্ষ সমাধানটি এর জনপ্রিয়তার দাবিদার, তবে প্রতিটি নতুন পরামিতিগুলির জন্য নতুন নিয়মিত প্রকাশ এবং কোয়েরি স্ট্রিং পুনরায় পার্স করার পদ্ধতিটি অত্যন্ত অযোগ্য fficient অনেক বেশি কার্যকর (এবং বহুমুখী সমাধান) দীর্ঘকাল ধরে অস্তিত্ব রয়েছে, উদাহরণস্বরূপ এই নিবন্ধটির মধ্যে এখানে আবার মুদ্রিত
জোসেফ মায়ার্স


4
জোসেফ, "jQuery প্রয়োজন হয় না যে চমৎকার পর্যবেক্ষণ"? অবশ্যই এর দরকার নেই। JQuery যা কিছু করে তা জাভাস্ক্রিপ্ট ব্যবহার করে। লোকেরা jQuery ব্যবহার করে না কারণ এটি জাভাস্ক্রিপ্ট করতে পারে না এমন স্টাফগুলি করে। JQuery এর পয়েন্ট সুবিধামত।
ভ্লাদিমির কর্নিয়া

উত্তর:


8319

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

আপনি ইউআরএল সার্চপ্যারামগুলি ব্যবহার করতে পারেন যা সহজ এবং শালীন (তবে সম্পূর্ণ নয়) ব্রাউজার সমর্থন রয়েছে

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


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


131
এই ফাংশনটি কীভাবে পরিচালনা করবে http://www.mysite.com/index.php?x=x1&x=x2&x=x3ক্ষেত্রের মান xঅস্পষ্ট।
dpp

94
এটি বহু-মূল্যবান কীগুলিও পরিচালনা করে না , যা পুরোপুরি আইনীও।
হিরিম্যাপ্লেড

17
আপনি কেন এটির জন্য নিয়মিত ভাবটি ব্যবহার করবেন?
রাই-

28
এর ক্যোরিস্ট্রিংয়ের জন্য ?mykey=0&m.+key=1কল করার পরিবর্তে getParameterByName("m.+key")ফিরে আসবে । আপনার নিয়মিত অভিব্যক্তি তৈরির আগে আপনাকে নিয়মিত এক্সপ্রেশন মেটাচার্যাক্টর এড়িয়ে চলতে হবে । এবং আপনাকে কেবলমাত্র বৈশ্বিক পতাকা ব্যবহার করে এবং প্রতিস্থাপনের এক্সপ্রেশন হিসাবে একবার কল করতে হবে । পরিবর্তে আপনার অনুসন্ধান করা উচিত । 400 টিরও বেশি upvotes সহ একটি উত্তরের এই বিবরণগুলির জন্য অ্যাকাউন্ট থাকা উচিত। 01name.replace()"\\$&"location.searchlocation.href
gille3

7
আপনার বা অন্য কোনও উদ্দেশ্যে jQuery দরকার নেই। আপনি কেবল এটি প্রয়োজন নেই।
gztomas

1707

এখানে পোস্ট করা কয়েকটি সমাধান অকার্যকর। স্ক্রিপ্টটি যখনই কোনও প্যারামিটারটি অ্যাক্সেস করার প্রয়োজন হয় ততবার নিয়মিত অভিব্যক্তি অনুসন্ধান পুনরাবৃত্তি করা সম্পূর্ণরূপে অপ্রয়োজনীয়, প্যারামিটারগুলিকে একটি এসোসিয়েটিভ-অ্যারে স্টাইল অবজেক্টে বিভক্ত করার জন্য একটি ফাংশনই যথেষ্ট। আপনি যদি এইচটিএমএল 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]);
})();

ক্যোরিস্ট্রিংয়ের উদাহরণ:

?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

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

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


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

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

অনেক সহজ!

আপডেট

একটি নতুন ক্ষমতা হ'ল নিম্নলিখিত হিসাবে পুনরাবৃত্তি হওয়া প্যারামগুলি পুনরুদ্ধার করা myparam=1&myparam=2। কোনও স্পেসিফিকেশন নেই , তবে বর্তমানের বেশিরভাগ পন্থা অ্যারে তৈরি করে follow

myparam = ["1", "2"]

সুতরাং, এটি এটি পরিচালনা করার পদ্ধতি:

let urlParams = {};
(window.onpopstate = function () {
    let 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);

    while (match = search.exec(query)) {
        if (decode(match[1]) in urlParams) {
            if (!Array.isArray(urlParams[decode(match[1])])) {
                urlParams[decode(match[1])] = [urlParams[decode(match[1])]];
            }
            urlParams[decode(match[1])].push(decode(match[2]));
        } else {
            urlParams[decode(match[1])] = decode(match[2]);
        }
    }
})();

11
যদি আপনি একটি ভারী অজ্যাক্স অ্যাপ্লিকেশনটি করেন তবে আপনি "ব্যাক বোতামটি সক্ষম করতে" হ্যাশ (#) ব্যবহার করতে পারেন ... সেক্ষেত্রে ক্যোরিস্ট্রিং সব সময় বদলে যাবে (দেখুন কীভাবে ফেসবুক এটি করে)। .. যদিও এই সমাধানগুলি # অ্যানওয়েজের পরে আসা জিনিসগুলিকে উপেক্ষা করে ...
নিক ফ্রান্সচেছিনা

100
@ নিক: window.location.hashসম্পত্তিটিতে হ্যাশ থাকার পরে যে কোনও কিছু থাকে যা window.location.searchসম্পত্তি থেকে পৃথক । যদি হ্যাশ পরিবর্তন হয় তবে এটি ক্যোরিস্ট্রিংকে মোটেই প্রভাবিত করে না।
অ্যান্ডি ই

27
ভুলবেন না ;একটি হল আইনি বিভেদক পান key=valueজোড়া। এটি বিরল, তবে এটি বাস্তবায়নে 5 সেকেন্ড সময় লাগে।
অ্যালেক্স

4
ন্যায়সঙ্গত হওয়ার জন্য, ক্যোয়ারী স্ট্রিংয়ের জন্য কোনও নির্দিষ্ট বিন্যাস আরএফসি 3986 দ্বারা সংজ্ঞায়িত করা হয়নি। ?a=b&c=dপ্রচলিত, এবং ওয়েব ফর্মগুলির জন্য ডাব্লু 3 সি সুপারিশ, তবে ইউআরআই স্পেস কেবল সংজ্ঞায়িত করে query = *( pchar / "/" / "?" )
ম্যাথু গিলিয়ার্ড

21
আমরা যারা while(match = search.exec(query))while((match = search.exec(query)) !== null)
জেএসহিন্টের

1282

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

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
}

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

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

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


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

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

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

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

var qs = window.GetQueryString(query);

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

রেজেক্স পরীক্ষার কোড

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

উইন্ডোজ সার্ভার ২০০৮ R2 / 7 x64 এ ফায়ারফক্স 4.0 x86 এ পরীক্ষা করা

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

1
এটি নিয়মিত এক্সপ্রেশন ব্যবহারের পরিবর্তে স্ট্রিং বিভাজনও একটি দুর্দান্ত পদ্ধতি। এখানে উল্লেখ করার মতো কয়েকটি জিনিস রয়েছে: যদিও :-) ১ unescapeহ'ল একটি অবমূল্যায়িত ফাংশন এবং এর সাথে প্রতিস্থাপন করা হয়েছে decodeURIComponent(), নোট করুন যে এই ফাংশনগুলির কোনওটিই +একটি স্থানের অক্ষরকে সঠিকভাবে ডিকোড করবে না । ২. আপনার ফলাফলটিকে একটি অ্যারের পরিবর্তে একটি বস্তু হিসাবে ঘোষণা করা উচিত কারণ জাভাস্ক্রিপ্টে প্রতি সেসাইজেট অ্যারে নেই, এবং যে অ্যারে আপনি ঘোষণা করেছেন তাতে যেভাবেই নামযুক্ত বৈশিষ্ট্য বরাদ্দ করে তাকে কোনও বস্তু হিসাবে বিবেচনা করা হবে।
অ্যান্ডি ই

55
কৌতুহল কেন আপনি যখন এটিতে কোনও jQuery নির্দিষ্ট কোড না পেয়ে থাকেন তবে কেন আপনি এটিকে jQuery প্লাগইন তৈরি করবেন?
zachleat

63
@ জ্যাচলিট যদি আপনার কোনও কাঠামো না থাকে তবে আপনার ফাংশনগুলি কেবল আপনার কোড জুড়ে ছড়িয়ে যাবে। আপনি যদি jQuery প্রসারিত করেন তবে আপনার ফাংশনগুলির জন্য আপনার সুযোগ রয়েছে, এটি আপনার কোডের কোথাও ভাসবে না। আমি মনে করি এটিই একমাত্র কারণ।
ব্রুনোএলএম

6
জেএসএলিন্টটি পাস করার জন্য এখানে jQuery সংস্করণটি টুইট করা হয়েছে (কমপক্ষে 2011-06-15 এ জেএসলিন্ট ডট কমের অর্ধ-চলন্ত লক্ষ্য)। ক্রোকফোর্ডকে সন্তুষ্ট করার জন্য বেশিরভাগ জিনিসগুলি কেবল ঘোরে।
পৃষ্ঠপোষক

3
@ বেনজামিন গ্রুয়েনবাউম রসিকতা হিসাবে, আমিও ইউআরএল পার্সিংয়ের পারফরম্যান্সের মানদণ্ডের দিকটি বেশ দেখতে পাই না। যদি এটি এমন একটি বিস্মৃত জাভাস্ক্রিপ্ট মডিউল তৈরি করা হয়েছিল যা নোড থেকে বলা যেতে পারে, লগগুলি পার্স করুন, তবে হ্যাঁ। তবে এটির থেকে ইউআরএল প্যারামিটারগুলি বের করতে window.locationকোনও কার্যকারিতা উদ্বেগকে জোর করে তোলে, ইউআরএলটিতে ক্লায়েন্ট নেভিগেট করা অনেক বেশি ব্যয়বহুল given
ড্যান ড্যাসক্লেস্কু

659

আর্টেম বার্জারের উত্তরের উন্নত সংস্করণ :

function getParameterByName(name) {
    var match = RegExp('[?&]' + name + '=([^&]*)').exec(window.location.search);
    return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
}

উন্নতি সম্পর্কিত আরও তথ্যের জন্য দেখুন: http://james.padolsey.com/javascript/bujs-1-getparameterbyname/


23
আপনি যদি এটি আরও খানিকটা ছোট করতে চান তবে আপনি তিনটি শর্তসাপেক্ষে এটি সরিয়ে ফেলতে পারেন এবং শেষ লাইনটিতে একটি শর্ট সার্কিটরি দিয়ে এটি প্রতিস্থাপন করতে পারেন - return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
অ্যান্ডি ই

null'=' অনুসারে প্যারামিটারটি না থাকলে এটি ফিরে আসে । যদি প্যারামিটারটি কিছু না থাকে তবে if (!RegExp('[?&]'+name+'(&.*)?$').exec(window.location.search)) return false;আপনি এটিকে ফেরত দেওয়ার জন্য প্রস্তুতি নিতে boolean falseপারেন।
কমনপাইক

9
newরেজেক্স তৈরি করার সময় আমি উপসর্গটি ব্যবহার করব :var match = new RegExp('...
প্যাট্রিক বার্কলে

2
আইই ১১ বাগ: আই এসিআই অক্ষর 8206 (হেক্স: 200 ই - "বাম থেকে ডান চরিত্র") দিয়ে ফেরত মানটি পুনরায় বিতরণ করার সিদ্ধান্ত নিয়েছে। আমি এটি খুঁজে 6 ঘন্টা সময় নষ্ট! থেরাপিউটিক ভেন্টিং .... ঠিক করার জন্য, শেষ লাইনের শেষের দিকে .replace('\u200E', '')
টেক করুন

কমপক্ষে ম্যাকের ক্রোমে অন্তত (সম্ভবত অন্যান্য ব্রাউজারগুলিও) সর্বশেষ মানটি '/' যুক্ত করা হয়েছিল। সুতরাং আমি এটিকে উপেক্ষা করার জন্য রেজেক্সকে সংশোধন করেছি। var results = new RegExp('[\\?&]' + name + '=([^&#/]*)').exec(url);
কেসিবি

594

URLSearchParams

ফায়ারফক্স 44+, অপেরা 36+, এজ 17+, সাফারি 10.3+ এবং Chrome 49+ URLS SearchParams এপিআই সমর্থন করে :

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

এটা তোলে দ্বারা প্রমিত করা হয় না W3C এর , কিন্তু এটা দ্বারা একটি জীবন্ত মান WHATWG

আপনি এটি ব্যবহার করতে পারেন location:

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ইউআরএল অবজেক্টে শর্টহ্যান্ড সম্পত্তি ব্যবহার করেও প্যারামগুলি পেতে পারেন :

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)API- টি। আপনি সমস্ত মান ধরে করতে পারেন for (let p of params) {}

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


এই দুই ডাউনভোটার সম্ভবত মিস করেছেন (যেমন আমি কেবল করেছি) যে সত্যটি আপনি কেবল তার .getপরিবর্তে ব্যবহার করতে হবে.
নাকিলন

20
আপনি আসলে প্রয়োজন হবে না slice(1)উপর .search, আপনি এটি সরাসরি ব্যবহার করতে পারেন। URLS SearchParams নেতৃস্থানীয় পরিচালনা করতে পারে ?
জেসন সি

URLSearchParamsকোনও ভাল নয় কারণ এটি কোনও ইউআরএল এর পরামিতিগুলির আসল মানগুলি দেয় না।
মেলাব

এটি new URL('https://example.com?foo=1&bar=2') অ্যান্ড্রয়েড url- এর জন্য কাজ করছে নাfile:///android_asset/...
শাহ

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

400

অন্য একটি সুপারিশ। প্লাগইন পারল অ্যাঙ্কর, হোস্ট ইত্যাদি সহ ইউআরএলের সমস্ত অংশ পুনরুদ্ধার করতে দেয়

এটি jQuery এর সাথে বা ছাড়াই ব্যবহার করা যেতে পারে।

ব্যবহার খুব সহজ এবং দুর্দান্ত:

var url = $.url('http://allmarkedup.com/folder/dir/index.html?item=value'); // jQuery version
var url = purl('http://allmarkedup.com/folder/dir/index.html?item=value'); // plain JS version
url.attr('protocol'); // returns 'http'
url.attr('path'); // returns '/folder/dir/index.html'

তবে, ১১ ই নভেম্বর, ২০১৪ পর্যন্ত, পার্ল আর রক্ষণাবেক্ষণ করা হয় না এবং লেখক তার পরিবর্তে ইউআরআই.জে ব্যবহার করার পরামর্শ দেন । JQuery প্লাগইনটি আলাদা যে এটি উপাদানগুলিতে ফোকাস করে - স্ট্রিং সহ ব্যবহারের জন্য URI, jQuery সহ বা ছাড়া সরাসরি ব্যবহার করুন । অনুরূপ কোডটি এখানে ফুলার ডক্স হিসাবে দেখবে :

var url = new URI('http://allmarkedup.com/folder/dir/index.html?item=value'); // plain JS version
url.protocol(); // returns 'http'
url.path(); // returns '/folder/dir/index.html'

7
লেখার পুর হিসাবে আর রক্ষণাবেক্ষণ করা হয় না এবং পূর্ববর্তী রক্ষণাবেক্ষণকারী uri.js এর
ড্যান প্যান্ট্রি

238

TL; ড

একটি দ্রুত, সম্পূর্ণ সমাধান , যা মাল্টিভ্যালিউড কীগুলি এবং এনকোডেড অক্ষরগুলি পরিচালনা করে ।

var qd = {};
if (location.search) location.search.substr(1).split("&").forEach(function(item) {var s = item.split("="), k = s[0], v = s[1] && decodeURIComponent(s[1]); (qd[k] = qd[k] || []).push(v)})

//using ES6   (23 characters cooler)
var qd = {};
if (location.search) location.search.substr(1).split`&`.forEach(item => {let [k,v] = item.split`=`; v = v && decodeURIComponent(v); (qd[k] = qd[k] || []).push(v)})
মাল্টি রেখাযুক্ত:
var qd = {};
if (location.search) location.search.substr(1).split("&").forEach(function(item) {
    var s = item.split("="),
        k = s[0],
        v = s[1] && decodeURIComponent(s[1]); //  null-coalescing / short-circuit
    //(k in qd) ? qd[k].push(v) : qd[k] = [v]
    (qd[k] = qd[k] || []).push(v) // null-coalescing / short-circuit
})

এই সমস্ত কোডটি কী ...
"নাল-কোয়েলসিং" , শর্ট সার্কিট মূল্যায়ন
ES6 ডেস্ট্রাকচারিং অ্যাসাইনমেন্ট , অ্যার ফাংশন , টেম্পলেট স্ট্রিং

উদাহরণ:
"?a=1&b=0&c=3&d&e&a=5&a=t%20e%20x%20t&e=http%3A%2F%2Fw3schools.com%2Fmy%20test.asp%3Fname%3Dståle%26car%3Dsaab"
> qd
a: ["1", "5", "t e x t"]
b: ["0"]
c: ["3"]
d: [undefined]
e: [undefined, "http://w3schools.com/my test.asp?name=ståle&car=saab"]

> qd.a[1]    // "5"
> qd["a"][1] // "5"



ভ্যানিলা জাভাস্ক্রিপ্ট সমাধান সম্পর্কে আরও পড়ুন ...

কোনও ইউআরএল ব্যবহারের বিভিন্ন অংশ অ্যাক্সেস করতে location.(search|hash)

সবচেয়ে সহজ (ডামি) সমাধান

var queryDict = {};
location.search.substr(1).split("&").forEach(function(item) {queryDict[item.split("=")[0]] = item.split("=")[1]})
  • খালি কীগুলি সঠিকভাবে পরিচালনা করে ।
  • পাওয়া সর্বশেষ মান সহ বহু-কীগুলি ওভাররাইড করে ।
"?a=1&b=0&c=3&d&e&a=5"
> queryDict
a: "5"
b: "0"
c: "3"
d: undefined
e: undefined

বহু-মূল্যবান কী

সাধারণ কী চেক (item in dict) ? dict.item.push(val) : dict.item = [val]

var qd = {};
location.search.substr(1).split("&").forEach(function(item) {(item.split("=")[0] in qd) ? qd[item.split("=")[0]].push(item.split("=")[1]) : qd[item.split("=")[0]] = [item.split("=")[1]]})
  • পরিবর্তে অ্যারে ফিরিয়ে দেয় ।
  • অ্যাক্সেস মান qd.key[index]বাqd[key][index]
> qd
a: ["1", "5"]
b: ["0"]
c: ["3"]
d: [undefined]
e: [undefined]

এনকোড করা অক্ষর?

decodeURIComponent()দ্বিতীয় বা উভয় বিভক্ত জন্য ব্যবহার করুন ।

var qd = {};
location.search.substr(1).split("&").forEach(function(item) {var k = item.split("=")[0], v = decodeURIComponent(item.split("=")[1]); (k in qd) ? qd[k].push(v) : qd[k] = [v]})
উদাহরণ:
"?a=1&b=0&c=3&d&e&a=5&a=t%20e%20x%20t&e=http%3A%2F%2Fw3schools.com%2Fmy%20test.asp%3Fname%3Dståle%26car%3Dsaab"
> qd
a: ["1", "5", "t e x t"]
b: ["0"]
c: ["3"]
d: ["undefined"]  // decodeURIComponent(undefined) returns "undefined" !!!*
e: ["undefined", "http://w3schools.com/my test.asp?name=ståle&car=saab"]



মন্তব্য থেকে

* !!! দয়া করে নোট করুন, যে decodeURIComponent(undefined)স্ট্রিং ফিরে "undefined"। সমাধানটি একটি সাধারণ ব্যবহারের মধ্যে রয়েছে &&, যা নিশ্চিত করে যে decodeURIComponent()এটি অনির্ধারিত মানগুলিতে কল করা হয়নি। (শীর্ষে "সম্পূর্ণ সমাধান" দেখুন))

v = v && decodeURIComponent(v);


যদি ক্যোরিস্ট্রিং ফাঁকা থাকে ( location.search == ""), ফলাফলটি কিছুটা বিভ্রান্তিকর qd == {"": undefined}। পার্সিং ফাংশনটি লাইকসো চালু করার আগে ক্যোরিস্ট্রিংটি পরীক্ষা করার পরামর্শ দেওয়া হয়েছে:

if (location.search) location.search.substr(1).split("&").forEach(...)

1
খুশী হলাম। আমি কেবল যেটি পরিবর্তন করব - তা হল যদি কোনও কীটির জন্য একাধিক মান না থাকে তবে এটির অ্যারে হওয়ার দরকার নেই। প্রতি কিতে একাধিক মান থাকলে কেবল অ্যারে ব্যবহার করুন।
পাভেল নিকোলভ

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

@ ক্যাটশ হ্যাঁ, এটি> = আই 9 এ কাজ করে তবে আপনি array.forEach()আপনার স্ক্রিপ্টের শুরুতে নির্দিষ্ট কোড ইনজেকশনের মাধ্যমে আপনার জাভাস্ক্রিপ্ট প্রসেসরটি শিখতে পারেন । পলিফিল বিকাশকারী.মোজিলা.আর.ইন.ইউএস
কিওয়ার্টি

1
পাঠযোগ্যতার জন্য কিছুটা সমতল করে ফাংশন তৈরি করে এবং পুনরায় ব্যবহৃত স্প্লিট কল: ফাংশন parseQueryString () q var qd = {}; অবস্থান.search.substr (1) .স্প্লিট ("&")। forEach (ফাংশন (আইটেম) {var পার্টস = আইটেম.স্প্লিট ("="); var কে = পার্টস [0]; var ভি = ডিকোডেরিক উপাদান (অংশগুলি [ 1]); (কেড ইন কিউডি)? কুইড [কে] .পুষ (ভি): কুইড [কে] = [ভি,];); রিটার্ন Qd; }
কেসি

1
ডিকোডডোকামেন্টুরি (অপরিবর্তিত) অপরিবর্তিত পরিবর্তে "অপরিজ্ঞাত" দেয়। একটি কার্যকরী তবে খুব মার্জিত প্যাচ নয়: var qd = {}; location.search.substr(1).split("&").forEach( function(item) { var s = item.split("="), k = s[0], v; if(s.length>1) v = decodeURIComponent(s[1]); (k in qd) ? qd[k].push(v) : qd[k] = [v] })
লুপ করুন

218

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

এখানে সংক্ষেপ:

$.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 / ক্যোয়ারী স্ট্রিংটি ছিল xyz.com/index.html?lang=de

শুধু ফোন করুন var langval = $.urlParam('lang');, আপনি পেয়েছেন।

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


13
jQuery এর সাথে jQuery অবজেক্টটির ফাংশনটির নামস্থান রয়েছে বলে মনে হয়। এছাড়াও, কেন অবৈধ মান 0? অবশ্যই, আমি কঠোর সমতা চেক ব্যবহার করতে পারি, তবে এটি হওয়া উচিত নয় null?
অ্যালেক্স

একমত। এটি ঠিক সেইভাবে একটি সাধারণ জাভাস্ক্রিপ্ট ভেরিয়েবল রেফারেন্সের মতো কাজ করে (সম্ভবত অপরিজ্ঞাত ফেরানো আরও সঠিক হবে)।
বিচ্ছিন্ন

'নাম' যথাযথভাবে পালানো যায় নি, এটি সরাসরি RegExp এ ইনজেকশনের। এটি ব্যর্থ হয়। অন্যরা যেমন বলেছেন, এটি অবিশ্বাস্যরূপে এই উত্তরগুলি হুইলটি পুনরায় উদ্ভাবন করছে এবং এতগুলি ভোট পাচ্ছে, যখন এটি কোনও পরীক্ষিত লাইব্রেরিতে প্রয়োগ করা উচিত।
ট্রায়ঙ্কো

167

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

... jQuery বিবিকিউ .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;
    }

})();​

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

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


100

কেবল দুটি বিভক্ত ব্যবহার করুন :

function get(n) {
    var half = location.search.split(n + '=')[1];
    return half !== undefined ? decodeURIComponent(half.split('&')[0]) : null;
}

আমি পূর্ববর্তী সমস্ত এবং আরও সম্পূর্ণ উত্তর পড়ছিলাম। তবে আমি মনে করি এটি সহজ এবং দ্রুত পদ্ধতি। আপনি এই jscreen বেঞ্চমার্কটি চেক করতে পারেন

রুপের মন্তব্যে সমস্যা সমাধানের জন্য, প্রথম রেখাটি নীচের দুটিতে পরিবর্তন করে শর্তযুক্ত বিভাজন যুক্ত করুন। তবে নিখুঁত নির্ভুলতার অর্থ এটি এখন রেজিপ্স্পের চেয়ে ধীর ( জেএসফিউর দেখুন )।

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;

7
খুব ঝরঝরে! এটি কাজ করবে না যদিও আপনি একটি কী নাম দিয়ে আগের মূল্য আছে যদি তুমি কাকে চাও, যেমন সঙ্গে প্রান্ত get('value')উপর http://the-url?oldvalue=1&value=2
রূপটি

3
তবে, আপনি যদি জানেন যে প্যারামিটারটির নামটি প্রত্যাশা করছে, এটি তত দ্রুত পন্থা হবে।
মার্টিন বোরথেরি

সম্পাদিত: আপনি যদি এটি halfসত্যবাদিতা পরীক্ষা করেন তবে এটি খালি প্যারামিটারের মতো বাতিল হয়ে যায় ?param=। এই ক্ষেত্রে খালি স্ট্রিংটি ফিরিয়ে দেওয়া উচিত, এবং চেক করা এটি half !== undefinedসমাধান করে।
ফিলাহ

শান্ত! আমি একটি ওয়ান-লাইনার তৈরি করেছি:function get(param){return decodeURIComponent((location.search.split(param+'=')[1]||'').split('&')[0])}
নিিউটেক

return half !== undefined ? decodeURIComponent(half[1].split('&')[0]) : null;এটির কাজটি পেতে আমাকে দ্বিতীয় লাইনটি পরিবর্তন করতে হয়েছিল
ডিভিলিওসেজগুলি

95

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

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

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


76

আপনি যদি কেবল ক্যোরিস্ট্রিংকে বিশ্লেষণের চেয়ে আরও বেশি ইউআরএল ম্যানিপুলেশন করছেন তবে আপনি ইউআরআই.জেসকে সহায়ক বলে মনে করতে পারেন । এটি ইউআরএলগুলি ম্যানিপুলেট করার জন্য একটি গ্রন্থাগার - এবং এটি সমস্ত ঘণ্টা এবং হুইসেল সহ আসে। (এখানে স্ব-বিজ্ঞাপনের জন্য দুঃখিত)

আপনার ক্যোয়ারিংস্ট্রিংকে মানচিত্রে রূপান্তর করতে:

var data = URI('?foo=bar&bar=baz&foo=world').query(true);
data == {
  "foo": ["bar", "world"],
  "bar": "baz"
}

(ইউআরআই.জেসগুলি খারাপ ক্যোরিস্ট্রিংগুলিকে "ফিক্স" ?&foo&&bar=baz&করে ?foo&bar=baz)


// প্রয়োজনীয় src / URI.fragmentURI.js লোড করতে হবে
জোব

1
+1 ইউআরআই.জেএস একটি দুর্দান্ত ছোট প্লাগইন। আপনি var data = URI.parseQuery('?foo=bar&bar=baz&foo=world');একই ফলাফল ( ডক্স ) এর জন্যও করতে পারেন ।
ইয়ারিন

62

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

অন্যদিকে, আমি গুগল ক্রোমে বিল্ট-ইন ফাংশন পছন্দ করি: উইন্ডো.লোকেশন.জেটপ্যারামিটার।

তাহলে কেন এটি ব্যবহার করবেন না? ঠিক আছে, অন্য ব্রাউজারগুলিতে নেই। সুতরাং আসুন এই ফাংশনটি তৈরি না করে যদি এটি বিদ্যমান না থাকে:

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

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


3
দেখে মনে হচ্ছে উইন্ডো.লোকেশন.জেটপ্যারামিটার () Chrome থেকে সরানো হয়েছে।
mhenry1384

54

পিএইচপি $ _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"
}

আপনার যদি এটি jQuery প্লাগইন হিসাবে প্রয়োজন হয়, এখানে এটি: (function($) { $.extend({ get_query: function (name) { var url = location.href; 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]] = qs[i][1]; } return result; } }); })(jQuery);এবং এটি ব্যবহার করুন:$.get_query()
টাইম

ধন্যবাদ। আমিও এটি ব্যবহার করে শেষ করেছি। আমি আপনার রিটার্ন স্টেটমেন্টের আগে এটি যুক্ত করেছিলাম: যদি (পরম) রিটার্নের ফলাফল [পরম] হয়, প্রয়োজনে আমি এইভাবে get_query ('foo' )ও করতে পারি
sqram

1
আপনার যদি হ্যাশ থাকে তবে কাজ করছেন না। উদাহরণস্বরূপ: test.aspx? Test = t1 # ডিফল্ট । পরীক্ষায় ফিরে আসবে: "t1 # ডিফল্ট" I এবং আমি প্রত্যাশা করছি {পরীক্ষা: "t1"}
বোগদান এম

@ বোগদান এম: সত্যই। location.hrefসঙ্গে প্রতিস্থাপন করতে হবে location.search
ড্যান ড্যাসকলেসকু

53

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

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

1
আমার মনে হয় আপনি আমাকে হিসাবে অনুরূপ কিছু কাজ করা হয়, কিন্তু আমি মনে করি আমার পদ্ধতির অনেক simplier হয় stackoverflow.com/a/21152762/985454
কোয়ার্টি

আমাকে আপনার সাথে পরিচয় করিয়ে দিন (ড্রামল প্লিজ) window.location.search!
এরিক

46

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

এটি একটি সাধারণ গ্রন্থাগার পদ্ধতি যা ইউআরএল পরামিতিগুলির বিচ্ছিন্নকরণ এবং হেরফের করে। স্থির পদ্ধতিতে নিম্নলিখিত সাব-পদ্ধতি রয়েছে যা সাবজেক্ট ইউআরএলে কল করা যেতে পারে:

  • getHost
  • getPath
  • getHash
  • setHash
  • getParams
  • getQuery
  • setParam
  • getParam
  • hasParam
  • removeParam

উদাহরণ:

URLParser(url).getParam('myparam1')

var url = "http://www.test.com/folder/mypage.html?myparam1=1&myparam2=2#something";

function URLParser(u){
    var path="",query="",hash="",params;
    if(u.indexOf("#") > 0){
        hash = u.substr(u.indexOf("#") + 1);
        u = u.substr(0 , u.indexOf("#"));
    }
    if(u.indexOf("?") > 0){
        path = u.substr(0 , u.indexOf("?"));
        query = u.substr(u.indexOf("?") + 1);
        params= query.split('&');
    }else
        path = u;
    return {
        getHost: function(){
            var hostexp = /\/\/([\w.-]*)/;
            var match = hostexp.exec(path);
            if (match != null && match.length > 1)
                return match[1];
            return "";
        },
        getPath: function(){
            var pathexp = /\/\/[\w.-]*(?:\/([^?]*))/;
            var match = pathexp.exec(path);
            if (match != null && match.length > 1)
                return match[1];
            return "";
        },
        getHash: function(){
            return hash;
        },
        getParams: function(){
            return params
        },
        getQuery: function(){
            return query;
        },
        setHash: function(value){
            if(query.length > 0)
                query = "?" + query;
            if(value.length > 0)
                query = query + "#" + value;
            return path + query;
        },
        setParam: function(name, value){
            if(!params){
                params= new Array();
            }
            params.push(name + '=' + value);
            for (var i = 0; i < params.length; i++) {
                if(query.length > 0)
                    query += "&";
                query += params[i];
            }
            if(query.length > 0)
                query = "?" + query;
            if(hash.length > 0)
                query = query + "#" + hash;
            return path + query;
        },
        getParam: function(name){
            if(params){
                for (var i = 0; i < params.length; i++) {
                    var pair = params[i].split('=');
                    if (decodeURIComponent(pair[0]) == name)
                        return decodeURIComponent(pair[1]);
                }
            }
            console.log('Query variable %s not found', name);
        },
        hasParam: function(name){
            if(params){
                for (var i = 0; i < params.length; i++) {
                    var pair = params[i].split('=');
                    if (decodeURIComponent(pair[0]) == name)
                        return true;
                }
            }
            console.log('Query variable %s not found', name);
        },
        removeParam: function(name){
            query = "";
            if(params){
                var newparams = new Array();
                for (var i = 0;i < params.length;i++) {
                    var pair = params[i].split('=');
                    if (decodeURIComponent(pair[0]) != name)
                          newparams .push(params[i]);
                }
                params = newparams;
                for (var i = 0; i < params.length; i++) {
                    if(query.length > 0)
                        query += "&";
                    query += params[i];
                }
            }
            if(query.length > 0)
                query = "?" + query;
            if(hash.length > 0)
                query = query + "#" + hash;
            return path + query;
        },
    }
}


document.write("Host: " + URLParser(url).getHost() + '<br>');
document.write("Path: " + URLParser(url).getPath() + '<br>');
document.write("Query: " + URLParser(url).getQuery() + '<br>');
document.write("Hash: " + URLParser(url).getHash() + '<br>');
document.write("Params Array: " + URLParser(url).getParams() + '<br>');
document.write("Param: " + URLParser(url).getParam('myparam1') + '<br>');
document.write("Has Param: " + URLParser(url).hasParam('myparam1') + '<br>');

document.write(url + '<br>');

// Remove the first parameter
url = URLParser(url).removeParam('myparam1');
document.write(url + ' - Remove the first parameter<br>');

// Add a third parameter
url = URLParser(url).setParam('myparam3',3);
document.write(url + ' - Add a third parameter<br>');

// Remove the second parameter
url = URLParser(url).removeParam('myparam2');
document.write(url + ' - Remove the second parameter<br>');

// Add a hash
url = URLParser(url).setHash('newhash');
document.write(url + ' - Set Hash<br>');

// Remove the last parameter
url = URLParser(url).removeParam('myparam3');
document.write(url + ' - Remove the last parameter<br>');

// Remove a parameter that doesn't exist
url = URLParser(url).removeParam('myparam3');
document.write(url + ' - Remove a parameter that doesn\"t exist<br>');

44

এমডিএন থেকে :

function loadPageVar (sVar) {
  return unescape(window.location.search.replace(new RegExp("^(?:.*[&\\?]" + escape(sVar).replace(/[\.\+\*]/g, "\\$&") + "(?:\\=([^&]*))?)?.*$", "i"), "$1"));
}

alert(loadPageVar("name"));

39

কোড গল্ফ:

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

9
আমি আপনার উত্তরটি পছন্দ করি, বিশেষত স্ক্রিপ্টটি কতটা কমপ্যাক্ট, তবে আপনার সম্ভবত ডিকোডেরিউআরকিউম্পোন্ট ব্যবহার করা উচিত। দেখুন xkr.us/articles/javascript/encode-compare এবং stackoverflow.com/questions/619323/...
pluckyglen

39

আমি নিয়মিত এক্সপ্রেশন ব্যবহার করি, তবে তার জন্য নয়।

আমার অ্যাপ্লিকেশনটিতে একবারে ক্যোরি স্ট্রিংটি পড়তে আমার পক্ষে সহজ এবং আরও দক্ষ মনে হয়েছে এবং সমস্ত কী / মান জোড় থেকে একটি বিষয় তৈরি করা যেমন:

var search = function() {
  var s = window.location.search.substr(1),
    p = s.split(/\&/), l = p.length, kv, r = {};
  if (l === 0) {return false;}
  while (l--) {
    kv = p[l].split(/\=/);
    r[kv[0]] = decodeURIComponent(kv[1] || '') || true;
  }
  return r;
}();

একটি URL মত http://domain.com?param1=val1&param2=val2আপনি আপনার কোড পরবর্তী তাদের মূল্য পেতে পারেন search.param1এবং search.param2


38
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

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

38

রোশাম্বো jQuery পদ্ধতি ডিকোড URL টি যত্ন নিচ্ছে না

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

36

আমি চাই এই এক (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;
}

আমার জন্য দুর্দান্ত কাজ করে


36

মান ব্যতীত কীগুলির সাহায্যে ক্যোয়ারী স্ট্রিংগুলি পার্স করার অতিরিক্ত ক্ষমতা সহ - এই দুর্দান্ত উত্তরে আমার সম্পাদনাটি এখানে ।

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

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

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


34

আমার কাছে ক্যোয়ারী স্ট্রিং থেকে একটি বিষয় প্রয়োজন এবং আমি প্রচুর কোডকে ঘৃণা করি। এটি মহাবিশ্বের সবচেয়ে মজবুত নাও হতে পারে তবে এটি কোডের কয়েকটি লাইন।

var q = {};
location.href.split('?')[1].split('&').forEach(function(i){
    q[i.split('=')[0]]=i.split('=')[1];
});

মত একটি URL this.htm?hello=world&foo=barতৈরি করবে:

{hello:'world', foo:'bar'}

4
ঝরঝরে। মজিলার মতে, যদিও, আইচ আইআই or বা ৮ এ কাজ করে না এবং আমার সন্দেহ হয় যে কোনও জিজ্ঞাসার স্ট্রিং না থাকলেই পড়ে যাব। একটি ন্যূনতম উন্নতি যা আরও কেসগুলি কভার করবে সেটির decodeURIComponentমূল্য হ'ল এটি সংরক্ষণ করার সাথে - এবং তাত্ক্ষণিকভাবে মূল কী তবে আপনার এতে অদ্ভুত স্ট্রিং ব্যবহার করার সম্ভাবনা কম less
রুপ

1
সুন্দর এবং সহজ। অ্যারে প্যারামিটারগুলি পরিচালনা করে না বা ?a&b&cএটি সত্যিই খুব পঠনযোগ্য (এবং ঘটনাক্রমে আমার প্রথম ধারণার সাথে একই)। এছাড়াও এটি splitঅনর্থক তবে আমি 10 টি চরিত্রের স্ট্রিংকে দু'বার বিভক্ত করার চেয়ে ভাজার জন্য আরও বড় পারফরম্যান্সযুক্ত মাছ পেয়েছি।
cod3monk3y

1
যখন ক্যোরিস্ট্রিংটি "? হ্যালো = ওয়ার্ল্ড এবং ওয়ান = এ = বি এবং টু = ২" হয় তখন আপনি যখন 'এক' এর মানটি ধরেন তবে মানটিতে প্রথম '=' এর আগে আপনি কেবল সেই অংশটি পাবেন। এর মান 'এ = বি' হওয়া উচিত তবে আপনি কেবল 'এ' পাবেন কারণ আপনি 'ওয়ান = এ = বি' অন '=' তে বিভক্ত হয়েছেন। এটি কেবল বগি। : ((
শন কোভাক

2
আমি ব্যবহার করেন location.search.substr(1)পরিবর্তে location.href.split('?')[1]হ্যাশ (গোছগাছ এড়াতে #anchor) গত ক্যোয়ারী মাপদন্ড করেন।
mlt 3

হ্যাঁ, আমাকেও আপনার সাথে পরিচয় করিয়ে দিন location.search!
এরিক

32

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

এটি নিম্নলিখিত ক্যোয়ারস্ট্রিং পরিচালনা করবে ...

? পরীক্ষার = হ্যালো & ব্যক্তি = 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কীটি সনাক্তযোগ্য এবং বৈধ (কমপক্ষে ডটনেটের নামভ্যালু সংকলনে যোগ করুন ) যুক্ত করুন:

যদি নির্দিষ্ট কীটি ইতিমধ্যে টার্গেট নেমভ্যালু কালেকশন ইভেন্টে বিদ্যমান থাকে তবে নির্দিষ্ট মানটি "মান 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;
};

ক্যোয়ারী স্ট্রিংয়ের মান পাওয়ার জন্য আপনি এই "গেটপ্যারামিটারভ্যালুগুলি" ফাংশনটি ব্যবহার করতে পারেন। এর মধ্যে আপনাকে ক্যোরিয়াস স্ট্র্যাং প্যারামিটারের নামটি পাস করতে হবে এবং এটি আপনাকে মান return (ডকুমেন্ট) প্রদান করবে ready ফাংশন গেটপ্যারামিটারভ্যালু (প্যারাম) ur var url = ডিকোডেরিউআরসিউম্পোনেন্ট (উইন্ডো.লোকেশন এইচআরএফ); url = url.slice (url.indexOf ('?') + 1) .স্প্লিট ('&'); (var i = 0; i <url.length; i++) {var urlparam = url [i] .splિટ ('='); যদি (urlparam [0] == পরম) - urlparam ফিরে [1]; }}
মাইক ক্লার্ক 10

1
আমি এটি কিছুক্ষণের জন্য ব্যবহার করে আসছি এবং এটি এখন পর্যন্ত দুর্দান্ত হয়েছে। ইউলিঙ্কডড অ্যারেগুলি পরিচালনা করা ব্যতীত। ব্যবহার q = decodeURIComponent(window.location.search.substring(1)),এটিও এটি করতে সহায়তা করে।
ভ্লাদিস্লাভ দিমিত্রভ

31

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

আমি এর একটি সংকোচিত সংস্করণ ব্যবহার করি। কী চলছে তা আরও ভাল করে জানাতে আমি নভিশীদের ধরণের জন্য সংকুচিত পোস্ট করছি।

আমি নিশ্চিত এটিকে আরও দ্রুত কাজ করার জন্য অনুকূলিত করা বা ভিন্নভাবে করা যেতে পারে তবে এটি আমার প্রয়োজনের জন্য সর্বদা দুর্দান্ত কাজ করেছে।

উপভোগ করুন।

function getQSP(sName, sURL) {
    var theItmToRtn = "";
    var theSrchStrg = location.search;
    if (sURL) theSrchStrg = sURL;
    var sOrig = theSrchStrg;
    theSrchStrg = theSrchStrg.toUpperCase();
    sName = sName.toUpperCase();
    theSrchStrg = theSrchStrg.replace("?", "&") theSrchStrg = theSrchStrg + "&";
    var theSrchToken = "&" + sName + "=";
    if (theSrchStrg.indexOf(theSrchToken) != -1) {
        var theSrchTokenLth = theSrchToken.length;
        var theSrchTokenLocStart = theSrchStrg.indexOf(theSrchToken) + theSrchTokenLth;
        var theLocOfNextAndSign = theSrchStrg.indexOf("&", theSrchTokenLocStart);
        theItmToRtn = unescape(sOrig.substring(theSrchTokenLocStart, theLocOfNextAndSign));
    }
    return unescape(theItmToRtn);
}

এছাড়াও, ইউনস্কেপ () এর পরিবর্তে ডিকোডিউরি () বা ডিকোডিউআরআইকিউম্পোনেন্ট () ব্যবহার করা ভাল। বিকাশকারী.মোজিলা.আর.ইন-
ইউএস / ডকস / ওয়েব / জাভা স্ক্রিপ্ট / রেফারেন্স/…

27

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

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

বা পুরো লট পেয়ে:

var params = Arg.all();

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


আপনি আমাকে বাঁচিয়েছেন .. arg.js সমাধানটি সমাধানের কোনওটিই আইই 8 তে # থেকে মান পাচ্ছে না ::( আইই 8 এর জন্য অনুসন্ধান করা যে কেউ # অনুরোধ থেকে এই সমাধানটি পেয়েছেন ..
দিলীপ রাজকুমার

27

এই প্রশ্নের শীর্ষের উত্তরের সমস্যাটি হ'ল এটি # এর পরে সমর্থিত প্যারামিটারগুলি নয়, তবে কখনও কখনও এই মানটি পাওয়াও দরকার।

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

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

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

2
হ্যা আমি জানি. তবে আমার অ্যাপ্লিকেশনটিতে আমি তৃতীয় পক্ষের জেএস নেভিগেশনকে একীভূত করেছি, যা হ্যাশ সাইন পরে কিছু পরামিতি রয়েছে।
Ph0en1x

উদাহরণস্বরূপ, গুগল অনুসন্ধান পৃষ্ঠায়, অনুসন্ধান কোয়েরি হ্যাশ সাইন '#' দ্বারা অনুসরণ করা হবে।
এটল্ডস

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

এবং এইভাবে আপনি এই URL টি ধরে ধরে এই ফাংশনটি ব্যবহার করতে পারেন

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

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

ইতিমধ্যে এখানে এই পদ্ধতির কয়েকটি বাস্তবায়ন হয়েছে। খুব কমপক্ষে আপনাকে ফলাফলের মানগুলি ডিকোড করতে হবে। উদাহরণস্বরূপ, যদি আপনি কোনও মান নির্দিষ্ট না করেন তবে এটিও দুর্ব্যবহার করতে পারে ?stringtext&stringword=foo
রূপ

24

আপনি যদি ব্রাউজারফি ব্যবহার করছেন তবে আপনি নোড.জেএসurl থেকে মডিউলটি ব্যবহার করতে পারেন :

var url = require('url');

url.parse('http://example.com/?bob=123', true).query;

// returns { "bob": "123" }

আরও পড়ুন: ইউআরএল নোড.জেএস v0.12.2 ম্যানুয়াল এবং ডকুমেন্টেশন

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

const url = new URL('http://example.com/?bob=123');
url.searchParams.get('bob'); 

আপনি এর জন্য ইউআরএল সার্চপ্যারামগুলিও ব্যবহার করতে পারেন, এটি ইউআরএল অনুসন্ধান অনুসন্ধানের সাথে করার জন্য এমডিএন থেকে একটি উদাহরণ রয়েছে:

var paramsString = "q=URLUtils.searchParams&topic=api";
var searchParams = new URLSearchParams(paramsString);

//Iterate the search parameters.
for (let p of searchParams) {
  console.log(p);
}

searchParams.has("topic") === true; // true
searchParams.get("topic") === "api"; // true
searchParams.getAll("topic"); // ["api"]
searchParams.get("foo") === null; // true
searchParams.append("topic", "webdev");
searchParams.toString(); // "q=URLUtils.searchParams&topic=api&topic=webdev"
searchParams.set("topic", "More webdev");
searchParams.toString(); // "q=URLUtils.searchParams&topic=More+webdev"
searchParams.delete("topic");
searchParams.toString(); // "q=URLUtils.searchParams"

urlমডিউলটির API এর ডকুমেন্টেশনটি এখানে রয়েছে: nodejs.org/api/url.html
andrezsanchez

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

ওহ এই দুর্দান্ত! URLS SearchParams নিখুঁত কাজ করে। অনেক ধন্যবাদ!
বরান এমরে

1
সম্ভবত সেরা ভোট হওয়া উচিত, কাস্টম ফাংশন এবং অতিরিক্ত লাইব্রেরি নিয়ে কোনও ঝামেলা নেই। এছাড়া বেশিরভাগ ব্রাউজার 2019. দ্বারা গৃহীত হবে বলে মনে হয়
TheWhiteLlama
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.