JQuery (বা ছাড়া) এর মাধ্যমে ক্যোয়ারী স্ট্রিংয়ের মানগুলি পুনরুদ্ধারের কোনও প্লাগইন-কম উপায় আছে ?
যদি তাই হয়, কিভাবে? যদি তা না হয় তবে এমন কোনও প্লাগইন রয়েছে যা এটি করতে পারে?
JQuery (বা ছাড়া) এর মাধ্যমে ক্যোয়ারী স্ট্রিংয়ের মানগুলি পুনরুদ্ধারের কোনও প্লাগইন-কম উপায় আছে ?
যদি তাই হয়, কিভাবে? যদি তা না হয় তবে এমন কোনও প্লাগইন রয়েছে যা এটি করতে পারে?
উত্তর:
আপডেট: সেপ্টেম্বর 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 " শিরোনাম উত্তর দেখুন ।
http://www.mysite.com/index.php?x=x1&x=x2&x=x3
ক্ষেত্রের মান x
অস্পষ্ট।
?mykey=0&m.+key=1
কল করার পরিবর্তে getParameterByName("m.+key")
ফিরে আসবে । আপনার নিয়মিত অভিব্যক্তি তৈরির আগে আপনাকে নিয়মিত এক্সপ্রেশন মেটাচার্যাক্টর এড়িয়ে চলতে হবে । এবং আপনাকে কেবলমাত্র বৈশ্বিক পতাকা ব্যবহার করে এবং প্রতিস্থাপনের এক্সপ্রেশন হিসাবে একবার কল করতে হবে । পরিবর্তে আপনার অনুসন্ধান করা উচিত । 400 টিরও বেশি upvotes সহ একটি উত্তরের এই বিবরণগুলির জন্য অ্যাকাউন্ট থাকা উচিত। 0
1
name
.replace()
"\\$&"
location.search
location.href
এখানে পোস্ট করা কয়েকটি সমাধান অকার্যকর। স্ক্রিপ্টটি যখনই কোনও প্যারামিটারটি অ্যাক্সেস করার প্রয়োজন হয় ততবার নিয়মিত অভিব্যক্তি অনুসন্ধান পুনরাবৃত্তি করা সম্পূর্ণরূপে অপ্রয়োজনীয়, প্যারামিটারগুলিকে একটি এসোসিয়েটিভ-অ্যারে স্টাইল অবজেক্টে বিভক্ত করার জন্য একটি ফাংশনই যথেষ্ট। আপনি যদি এইচটিএমএল 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]);
}
}
})();
window.location.hash
সম্পত্তিটিতে হ্যাশ থাকার পরে যে কোনও কিছু থাকে যা window.location.search
সম্পত্তি থেকে পৃথক । যদি হ্যাশ পরিবর্তন হয় তবে এটি ক্যোরিস্ট্রিংকে মোটেই প্রভাবিত করে না।
;
একটি হল আইনি বিভেদক পান key=value
জোড়া। এটি বিরল, তবে এটি বাস্তবায়নে 5 সেকেন্ড সময় লাগে।
?a=b&c=d
প্রচলিত, এবং ওয়েব ফর্মগুলির জন্য ডাব্লু 3 সি সুপারিশ, তবে ইউআরআই স্পেস কেবল সংজ্ঞায়িত করে query = *( pchar / "/" / "?" )
।
while(match = search.exec(query))
while((match = search.exec(query)) !== null)
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;
}, {}
)
: {}
};
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¶m2=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 এ পরীক্ষা করা
unescape
হ'ল একটি অবমূল্যায়িত ফাংশন এবং এর সাথে প্রতিস্থাপন করা হয়েছে decodeURIComponent()
, নোট করুন যে এই ফাংশনগুলির কোনওটিই +
একটি স্থানের অক্ষরকে সঠিকভাবে ডিকোড করবে না । ২. আপনার ফলাফলটিকে একটি অ্যারের পরিবর্তে একটি বস্তু হিসাবে ঘোষণা করা উচিত কারণ জাভাস্ক্রিপ্টে প্রতি সেসাইজেট অ্যারে নেই, এবং যে অ্যারে আপনি ঘোষণা করেছেন তাতে যেভাবেই নামযুক্ত বৈশিষ্ট্য বরাদ্দ করে তাকে কোনও বস্তু হিসাবে বিবেচনা করা হবে।
window.location
কোনও কার্যকারিতা উদ্বেগকে জোর করে তোলে, ইউআরএলটিতে ক্লায়েন্ট নেভিগেট করা অনেক বেশি ব্যয়বহুল given
আর্টেম বার্জারের উত্তরের উন্নত সংস্করণ :
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/
return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
।
null
'=' অনুসারে প্যারামিটারটি না থাকলে এটি ফিরে আসে । যদি প্যারামিটারটি কিছু না থাকে তবে if (!RegExp('[?&]'+name+'(&.*)?$').exec(window.location.search)) return false;
আপনি এটিকে ফেরত দেওয়ার জন্য প্রস্তুতি নিতে boolean false
পারেন।
new
রেজেক্স তৈরি করার সময় আমি উপসর্গটি ব্যবহার করব :var match = new RegExp('...
.replace('\u200E', '')
var results = new RegExp('[\\?&]' + name + '=([^&#/]*)').exec(url);
ফায়ারফক্স 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
পরিবর্তে ব্যবহার করতে হবে.
slice(1)
উপর .search
, আপনি এটি সরাসরি ব্যবহার করতে পারেন। URLS SearchParams নেতৃস্থানীয় পরিচালনা করতে পারে ?
।
URLSearchParams
কোনও ভাল নয় কারণ এটি কোনও ইউআরএল এর পরামিতিগুলির আসল মানগুলি দেয় না।
new URL('https://example.com?foo=1&bar=2')
অ্যান্ড্রয়েড url- এর জন্য কাজ করছে নাfile:///android_asset/...
অন্য একটি সুপারিশ। প্লাগইন পারল অ্যাঙ্কর, হোস্ট ইত্যাদি সহ ইউআরএলের সমস্ত অংশ পুনরুদ্ধার করতে দেয়
এটি 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'
একটি দ্রুত, সম্পূর্ণ সমাধান , যা মাল্টিভ্যালিউড কীগুলি এবং এনকোডেড অক্ষরগুলি পরিচালনা করে ।
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(...)
array.forEach()
আপনার স্ক্রিপ্টের শুরুতে নির্দিষ্ট কোড ইনজেকশনের মাধ্যমে আপনার জাভাস্ক্রিপ্ট প্রসেসরটি শিখতে পারেন । পলিফিল বিকাশকারী.মোজিলা.আর.ইন.ইউএস
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] })
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 সহ ইউআরএল প্যারামিটার এবং মানগুলি পান ।
0
? অবশ্যই, আমি কঠোর সমতা চেক ব্যবহার করতে পারি, তবে এটি হওয়া উচিত নয় null
?
আপনি যদি 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 টি পরিবর্তন করতে পারে যা পরামিতিগুলির ক্যাশে এবং তাদের মানগুলিকে অকার্যকর করে দেবে।
ইতিহাসটি পরিবর্তিত হওয়ার সাথে সাথে এই সংস্করণটি প্যারামিটারগুলির অভ্যন্তরীণ ক্যাশে আপডেট করবে।
কেবল দুটি বিভক্ত ব্যবহার করুন :
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;
get('value')
উপর http://the-url?oldvalue=1&value=2
।
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;
এটির কাজটি পেতে আমাকে দ্বিতীয় লাইনটি পরিবর্তন করতে হয়েছিল
অ্যান্ডি ই এর দুর্দান্ত সমাধানটিকে একটি পূর্ণাঙ্গ জিকুয়েরি প্লাগইন হিসাবে তৈরি করার জন্য আমার ছুরিকাঘাত এখানে:
;(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');
দুই ভুবনের সেরা!
আপনি যদি কেবল ক্যোরিস্ট্রিংকে বিশ্লেষণের চেয়ে আরও বেশি ইউআরএল ম্যানিপুলেশন করছেন তবে আপনি ইউআরআই.জেসকে সহায়ক বলে মনে করতে পারেন । এটি ইউআরএলগুলি ম্যানিপুলেট করার জন্য একটি গ্রন্থাগার - এবং এটি সমস্ত ঘণ্টা এবং হুইসেল সহ আসে। (এখানে স্ব-বিজ্ঞাপনের জন্য দুঃখিত)
আপনার ক্যোয়ারিংস্ট্রিংকে মানচিত্রে রূপান্তর করতে:
var data = URI('?foo=bar&bar=baz&foo=world').query(true);
data == {
"foo": ["bar", "world"],
"bar": "baz"
}
(ইউআরআই.জেসগুলি খারাপ ক্যোরিস্ট্রিংগুলিকে "ফিক্স" ?&foo&&bar=baz&
করে ?foo&bar=baz
)
আমি রায়ান ফেলানের সমাধানটি পছন্দ করি । তবে আমি এর জন্য 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];
};
}
রায়ান ফেলান থেকে এই ফাংশনটি কমবেশি, তবে এটি আলাদাভাবে মোড়ানো হয়েছে: পরিষ্কার নাম এবং অন্যান্য জাভাস্ক্রিপ্ট লাইব্রেরির কোনও নির্ভরতা নেই। আমার ব্লগে এই ফাংশন সম্পর্কে আরও ।
পিএইচপি $ _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($) { $.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()
location.href
সঙ্গে প্রতিস্থাপন করতে হবে location.search
।
এটি সরল জাভাস্ক্রিপ্ট কোডে সহজ রাখুন:
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');
window.location.search
!
এগুলি সব দুর্দান্ত উত্তর, তবে আমার আরও কিছুটা শক্তিশালী কিছু দরকার হয়েছিল এবং আমি ভেবেছিলাম যে আপনারা আমার তৈরি জিনিসটি পেতে পছন্দ করতে পারেন।
এটি একটি সাধারণ গ্রন্থাগার পদ্ধতি যা ইউআরএল পরামিতিগুলির বিচ্ছিন্নকরণ এবং হেরফের করে। স্থির পদ্ধতিতে নিম্নলিখিত সাব-পদ্ধতি রয়েছে যা সাবজেক্ট ইউআরএলে কল করা যেতে পারে:
উদাহরণ:
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>');
কোড গল্ফ:
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
আমি নিয়মিত এক্সপ্রেশন ব্যবহার করি, তবে তার জন্য নয়।
আমার অ্যাপ্লিকেশনটিতে একবারে ক্যোরি স্ট্রিংটি পড়তে আমার পক্ষে সহজ এবং আরও দক্ষ মনে হয়েছে এবং সমস্ত কী / মান জোড় থেকে একটি বিষয় তৈরি করা যেমন:
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¶m2=val2
আপনি আপনার কোড পরবর্তী তাদের মূল্য পেতে পারেন search.param1
এবং search.param2
।
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
রোশাম্বো 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;
}
আমি চাই এই এক (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('&'));
গুরুত্বপূর্ণ! শেষ লাইনে সেই ফাংশনের পরামিতি আলাদা is এটি কীভাবে কেউ এটির মধ্যে একটি সালিশী URL টি পাস করতে পারে তার উদাহরণ। আপনি বর্তমান URL টি পার্স করার জন্য ব্রুনোর উত্তর থেকে শেষ লাইনটি ব্যবহার করতে পারেন।
তাহলে ঠিক কী বদলে গেল? ইউআরএল http://sb.com/reg/step1?param=
ফলাফল একই হবে। তবে ইউআরএল দিয়ে http://sb.com/reg/step1?param
ব্রুনোর সমাধান কী ছাড়াই কোনও বস্তু ফেরত দেয়, যখন আমার কী param
এবং undefined
মান সহ কোনও বস্তু ফেরত দেয় returns
আমার কাছে ক্যোয়ারী স্ট্রিং থেকে একটি বিষয় প্রয়োজন এবং আমি প্রচুর কোডকে ঘৃণা করি। এটি মহাবিশ্বের সবচেয়ে মজবুত নাও হতে পারে তবে এটি কোডের কয়েকটি লাইন।
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'}
decodeURIComponent
মূল্য হ'ল এটি সংরক্ষণ করার সাথে - এবং তাত্ক্ষণিকভাবে মূল কী তবে আপনার এতে অদ্ভুত স্ট্রিং ব্যবহার করার সম্ভাবনা কম less
?a&b&c
এটি সত্যিই খুব পঠনযোগ্য (এবং ঘটনাক্রমে আমার প্রথম ধারণার সাথে একই)। এছাড়াও এটি split
অনর্থক তবে আমি 10 টি চরিত্রের স্ট্রিংকে দু'বার বিভক্ত করার চেয়ে ভাজার জন্য আরও বড় পারফরম্যান্সযুক্ত মাছ পেয়েছি।
location.search.substr(1)
পরিবর্তে location.href.split('?')[1]
হ্যাশ (গোছগাছ এড়াতে #anchor
) গত ক্যোয়ারী মাপদন্ড করেন।
location.search
!
এখানে অ্যান্ডি ই এর লিঙ্কযুক্ত "হ্যান্ডেল অ্যারে-স্টাইল ক্যোয়ারী স্ট্রিংগুলি" - রূপান্তরকরণের একটি বর্ধিত সংস্করণ। একটি বাগ সংশোধন করা হয়েছে ( ?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;
};
q = decodeURIComponent(window.location.search.substring(1)),
এটিও এটি করতে সহায়তা করে।
এটি একটি ফাংশন যা আমি কিছুক্ষণ আগে তৈরি করেছি এবং আমি এতে বেশ খুশি। এটি কেস সংবেদনশীল নয় - যা কার্যকর। এছাড়াও, যদি অনুরোধ করা কিউএস উপস্থিত না থাকে তবে এটি খালি স্ট্রিংটি দেয়।
আমি এর একটি সংকোচিত সংস্করণ ব্যবহার করি। কী চলছে তা আরও ভাল করে জানাতে আমি নভিশীদের ধরণের জন্য সংকুচিত পোস্ট করছি।
আমি নিশ্চিত এটিকে আরও দ্রুত কাজ করার জন্য অনুকূলিত করা বা ভিন্নভাবে করা যেতে পারে তবে এটি আমার প্রয়োজনের জন্য সর্বদা দুর্দান্ত কাজ করেছে।
উপভোগ করুন।
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);
}
আমরা সবেমাত্র arg.js প্রকাশ করেছি , এই প্রকল্পটি একবার এবং সবার জন্য সমাধান করার লক্ষ্য imed এটি গতানুগতিকভাবে এত কঠিন ছিল তবে এখন আপনি এটি করতে পারেন:
var name = Arg.get("name");
বা পুরো লট পেয়ে:
var params = Arg.all();
এবং যদি আপনি তার মধ্যে পার্থক্য সম্পর্কে যত্নশীল হন ?query=true
এবং #hash=true
তবে আপনি পদ্ধতি Arg.query()
এবং Arg.hash()
পদ্ধতিগুলি ব্যবহার করতে পারেন ।
এই প্রশ্নের শীর্ষের উত্তরের সমস্যাটি হ'ল এটি # এর পরে সমর্থিত প্যারামিটারগুলি নয়, তবে কখনও কখনও এই মানটি পাওয়াও দরকার।
আমি উত্তরটি সংশোধন করেছি যাতে এটি একটি হ্যাশ সাইন সহ একটি সম্পূর্ণ ক্যোয়ারী স্ট্রিংকেও পার্স করতে দেয়:
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;
};
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
।
আপনি যদি ব্রাউজারফি ব্যবহার করছেন তবে আপনি নোড.জেএস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