JQuery (හෝ නැතිව) හරහා විමසුම් වචන අගයන් ලබා ගැනීමේ ප්ලගිනය අඩු ක්රමයක් තිබේද?
එසේ නම්, කෙසේද? එසේ නොවේ නම්, එසේ කළ හැකි ප්ලගිනයක් තිබේද?
JQuery (හෝ නැතිව) හරහා විමසුම් වචන අගයන් ලබා ගැනීමේ ප්ලගිනය අඩු ක්රමයක් තිබේද?
එසේ නම්, කෙසේද? එසේ නොවේ නම්, එසේ කළ හැකි ප්ලගිනයක් තිබේද?
Answers:
යාවත්කාලීන කිරීම: 2018 සැප්තැම්බර්
ඔබට URLSearchParams භාවිතා කළ හැකි අතර එය සරල (නමුත් සම්පූර්ණ නොවේ) බ්රව්සර් සහාය ඇත.
const urlParams = new URLSearchParams(window.location.search);
const myParam = urlParams.get('myParam');
මුල්
ඒ සඳහා ඔබට jQuery අවශ්ය නොවේ. ඔබට පිරිසිදු ජාවාස්ක්රිප්ට් කිහිපයක් භාවිතා කළ හැකිය:
function getParameterByName(name, url) {
if (!url) url = window.location.href;
name = name.replace(/[\[\]]/g, '\\$&');
var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),
results = regex.exec(url);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(results[2].replace(/\+/g, ' '));
}
භාවිතය:
// query string: ?foo=lorem&bar=&baz
var foo = getParameterByName('foo'); // "lorem"
var bar = getParameterByName('bar'); // "" (present with empty value)
var baz = getParameterByName('baz'); // "" (present with no value)
var qux = getParameterByName('qux'); // null (absent)
සටහන: පරාමිතියක් කිහිප වතාවක් ( ?foo=lorem&foo=ipsum
) තිබේ නම්, ඔබට පළමු අගය ( lorem
) ලැබෙනු ඇත . මේ පිළිබඳව ප්රමිතියක් නොමැති අතර භාවිතයන් වෙනස් වේ, උදාහරණයක් ලෙස මෙම ප්රශ්නය බලන්න: අනුපිටපත් HTTP GET විමසුම් යතුරු වල බලයලත් පිහිටීම .
සටහන: ශ්රිතය සිද්ධි සංවේදී ය. ඔබ සිද්ධි-සංවේදී නොවන පරාමිති නාමයට කැමති නම්, RegExp වෙත 'i' විකරණකාරකය එක් කරන්න
එකම ප්රති result ලය වඩාත් සංක්ෂිප්තව ලබා ගැනීම සඳහා මෙය නව URLSearchParams පිරිවිතර මත පදනම් වූ යාවත්කාලීන කිරීමකි . පහත දැක්වෙන " URLSearchParams " යන පිළිතුර බලන්න .
http://www.mysite.com/index.php?x=x1&x=x2&x=x3
යුතු ආකාරය ක්ෂේත්රයේ වටිනාකම x
අපැහැදිලි ය.
?mykey=0&m.+key=1
, ඇමතුම වෙනුවට getParameterByName("m.+key")
නැවත පැමිණේ . ඔබේ නිත්ය ප්රකාශනය ගොඩනැගීමට පෙර නිත්ය ප්රකාශන මෙටාචරැක්ටර් වලින් ගැලවිය යුතුය . ඔබට අවශ්ය වන්නේ එක් වරක් පමණක් ගෝලීය ධජය භාවිතා කර ආදේශන ප්රකාශනය ලෙස භාවිතා කිරීමෙනි . ඒ වෙනුවට ඔබ සෙවිය යුතුය . උඩුකුරු 400 කට වඩා වැඩි පිළිතුරක් මෙම විස්තර සඳහා වගකිව යුතුය. 0
1
name
.replace()
"\\$&"
location.search
location.href
මෙහි පළ කර ඇති සමහර විසඳුම් අකාර්යක්ෂම වේ. ස්ක්රිප්ටයට පරාමිතියකට ප්රවේශ වීමට අවශ්ය සෑම අවස්ථාවකම නිත්ය ප්රකාශන සෙවීම පුනරාවර්තනය කිරීම සම්පූර්ණයෙන්ම අනවශ්යය, පරාමිතීන් අනුබද්ධ-අරාව ශෛලීය වස්තුවකට බෙදීමට එක් කාර්යයක් ප්රමාණවත් වේ. ඔබ HTML 5 ඉතිහාස API සමඟ වැඩ නොකරන්නේ නම්, මෙය අවශ්ය වන්නේ පිටු පැටවීමකට එක් වරක් පමණි. මෙහි ඇති අනෙක් යෝජනා ද 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
ප්රති ult ලය:
urlParams = {
enc: " Hello ",
i: "main",
mode: "front",
sid: "de8d49b78a85a322c4155015fdce22c4",
empty: ""
}
alert(urlParams["mode"]);
// -> "front"
alert("empty" in urlParams);
// -> true
අරා-ශෛලියේ විමසුම් නූල් හැසිරවීමට මෙය පහසුවෙන් වැඩිදියුණු කළ හැකිය. මේ සඳහා උදාහරණයක් මෙහි ඇත , නමුත් අරාව-ශෛලීය පරාමිතීන් RFC 3986 හි අර්ථ දක්වා නොමැති බැවින් මම මෙම පිළිතුර ප්රභව කේතය සමඟ දූෂණය නොකරමි. "දූෂිත" අනුවාදයක් ගැන උනන්දුවක් දක්වන අය සඳහා, කැම්බල්ගේ පිළිතුර පහත බලන්න .
එසේම, අදහස් දැක්වීමේදී පෙන්වා ඇති පරිදි, යුගල ;
සඳහා නෛතික පරිසීමකයකි key=value
. එය හැසිරවීමට වඩාත් සංකීර්ණ රීජෙක්ස් අවශ්ය වනු ඇත , ;
නැතහොත් &
එය අනවශ්ය යැයි මා සිතන බැවින් එය ;
භාවිතා කිරීම දුර්ලභ වන අතර ඒ දෙකම භාවිතා කිරීමට වඩා අඩු යැයි මම කියමි. ;
ඒ වෙනුවට ඔබට සහාය වීමට අවශ්ය නම් &
, ඒවා රීජෙක්ස් තුළට මාරු කරන්න.
<script>var urlParams = <?php echo json_encode($_GET, JSON_HEX_TAG);?>;</script>
වඩා සරලයි!
නව හැකියාවක් වනුයේ පහත දැක්වෙන පරිදි නැවත නැවතත් පරාමිතීන් ලබා ගැනීමයි
myparam=1&myparam=2
. එහි නො වේ පිරිවිතර , කෙසේ වෙතත්, වත්මන් ප්රවේශයන් බොහෝ රැසක් උත්පාදනය අනුගමනය කරන්න.
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
සාම්ප්රදායික වන අතර වෙබ් පෝරම සඳහා W3C නිර්දේශයකි, නමුත් URI පිරිවිතර අර්ථ දක්වයි 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('&'));
වැනි URL සමඟ ?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
}
එය අපැහැදිලි ය, නමුත් එය තේරුම්ගත හැකි ය. සමහර විචල්යයන් නිර්වචනය කර නොමැති නිසා එය ක්රියා නොකරයි.
ඔවුන් අතර, අදාල url එක මත පරාමිතීන් සොයා ගැනීමට ආරම්භ ?
ද හැෂ් සිට #
. ඉන්පසු සෑම පරාමිතියක් සඳහාම ඔවුන් සමාන ලකුණකට බෙදී යයි 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");
වින්ඩෝස් සර්වර් 2008 R2 / 7 x64 හි ෆයර්ෆොක්ස් 4.0 x86 හි පරීක්ෂා කිරීම
unescape
අවලංගු කරන ලද ශ්රිතයක් වන අතර එය ප්රතිස්ථාපනය වේ decodeURIComponent()
, මෙම ශ්රිත කිසිවක් +
අභ්යවකාශ අක්ෂරයකට නිවැරදිව විකේතනය නොකරන බව සලකන්න . 2. ඔබ ප්රති result ලය අරාවකට වඩා වස්තුවක් ලෙස ප්රකාශ කළ යුතුය, මන්ද ජාවාස්ක්රිප්ටයට අනුබද්ධ අරා නොමැති නිසා සහ ඔබ ප්රකාශ කරන අරාව කෙසේ හෝ නම් කරන ලද දේපල එයට පැවරීමෙන් වස්තුවක් ලෙස සලකනු ලැබේ.
window.location
ඕනෑම කාර්ය සාධනයක් ඇති කරයි, සේවාදායකයා URL වෙත සැරිසැරීම බොහෝ දුරට වඩා මිල අධික බැවින්.
ආටෙම් බාර්ගර්ගේ පිළිතුරේ වැඩි දියුණු කළ අනුවාදය :
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+ සහ ක්රෝම් 49+ URLSearchParams API සඳහා සහය දක්වයි :
IE හි ස්ථාවර අනුවාදයන් සඳහා ගූගල් විසින් යෝජනා කරන ලද URLSearchParams පොලිෆිල් ඇත.
එය W3C මගින් ප්රමිතිකරණය කර නැත , නමුත් එය WhatWG විසින් ජීවන තත්වයකි .
ඔබට එය භාවිතා කළ හැකිය location
:
let params = new URLSearchParams(location.search);
හෝ
let params = (new URL(location)).searchParams;
හෝ ඇත්ත වශයෙන්ම ඕනෑම URL එකක:
let url = new URL('https://example.com?foo=1&bar=2');
let params = new URLSearchParams(url.search);
.searchParams
URL වස්තුවෙහි කෙටිමං දේපලක් භාවිතා කරමින් ඔබට පරාමිතීන් ලබා ගත හැකිය ,
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
ඔබ එය සෘජුවම භාවිතා කළ හැකිය. URLSearchParams හට ප්රමුඛයා හැසිරවිය හැකිය ?
.
URLSearchParams
එය හොඳ නැත, මන්ද එය URL හි පරාමිතීන්ගේ සත්ය අගයන් ලබා නොදේ.
new URL('https://example.com?foo=1&bar=2')
ඇන්ඩ්රොයිඩ් යූආර්එල් සඳහා ක්රියා නොකරයිfile:///android_asset/...
තවත් නිර්දේශයක් පමණි. පර්ල් ප්ලගිනය මඟින් නැංගුරම, ධාරක යනාදිය ඇතුළුව URL හි සියලුම කොටස් ලබා ගැනීමට ඉඩ ලබා දේ.
එය 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'
කෙසේ වෙතත්, 2014 නොවැම්බර් 11 වන විට, පර්ල් තවදුරටත් නඩත්තු නොකරන අතර කතුවරයා ඒ වෙනුවට URI.js භාවිතා කිරීම නිර්දේශ කරයි . 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"
URL භාවිතයේ විවිධ කොටස් වෙත ප්රවේශ වීමට 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 == ""
) නම්, ප්රති result ලය තරමක් නොමඟ යවන සුළුයqd == {"": undefined}
. විග්රහ කිරීමේ ශ්රිතය likeo දියත් කිරීමට පෙර විමසුම පරීක්ෂා කිරීමට යෝජනා කෙරේ:
if (location.search) location.search.substr(1).split("&").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 හි රොෂම්බෝට සරල පිටපතක් ඇත ලබා ගත හැකි URL පරාමිතීන් සමඟ jQuery | වැඩි දියුණු කරන ලදි . ඔහුගේ පිටපත සමඟ ඔබට අවශ්ය පරාමිතීන් පහසුවෙන් ඉවත් කර ගත හැකිය.
සාරාංශය මෙන්න:
$.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');
, ඔබට එය තිබේ.
UZBEKJON හි මේ පිළිබඳව ද හොඳ බ්ලොග් සටහනක් ඇත, jQuery සමඟ URL පරාමිතීන් සහ අගයන් ලබා ගන්න .
0
ඇයි? ෂුවර්, මට දැඩි සමානාත්මතා පරීක්ෂණයක් භාවිතා කළ හැකිය, නමුත් එසේ නොවිය null
යුතුද?
ඔබ jQuery භාවිතා කරන්නේ නම්, ඔබට jQuery BBQ: Back බොත්තම සහ විමසුම් පුස්තකාලය වැනි පුස්තකාලයක් භාවිතා කළ හැකිය .
... jQuery BBQ
.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;
}
})();
නව HTML ඉතිහාස API සහ විශේෂයෙන් history.pushState()
සහhistory.replaceState()
, URL වෙනස් කළ හැකි අතර එමඟින් පරාමිති හැඹිලිය සහ ඒවායේ අගයන් අවලංගු වේ.
ඉතිහාසය වෙනස් වන සෑම අවස්ථාවකම මෙම අනුවාදය එහි අභ්යන්තර පරාමිතීන් යාවත්කාලීන කරයි.
බෙදීම් දෙකක් භාවිතා කරන්න :
function get(n) {
var half = location.search.split(n + '=')[1];
return half !== undefined ? decodeURIComponent(half.split('&')[0]) : null;
}
මම පෙර සහ වඩා සම්පූර්ණ පිළිතුරු කියවමින් සිටියෙමි. නමුත් මම හිතන්නේ එය සරලම හා වේගවත් ක්රමයයි. ඔබට මෙම jsPerf මිණුම් ලකුණෙන් පරීක්ෂා කළ හැකිය
රූප්ගේ ප්රකාශයේ ඇති ගැටළුව විසඳීම සඳහා, පළමු පේළිය පහත දෙකට වෙනස් කිරීමෙන් කොන්දේසි සහිත බෙදීමක් එක් කරන්න. නමුත් නිරපේක්ෂ නිරවද්යතාව යන්නෙන් අදහස් වන්නේ එය දැන් regexp ට වඩා මන්දගාමී බවයි ( jsPerf බලන්න ).
function get(n) {
var half = location.search.split('&' + n + '=')[1];
if (!half) half = location.search.split('?' + n + '=')[1];
return half !== undefined ? decodeURIComponent(half.split('&')[0]) : null;
}
එබැවින් ඔබ රූප්ගේ ප්රති-නඩුවට නොයන බව ඔබ දන්නේ නම්, මෙය ජය ගනී. එසේ නොමැති නම්, regexp.
නැතහොත් ඔබට විමසුම් පාලනයේ පාලනය තිබේ නම් සහ ඔබ ලබා ගැනීමට උත්සාහ කරන අගයක කිසි විටෙක URL සංකේතාත්මක අක්ෂර අඩංගු නොවන බවට සහතික විය හැකි නම් (මේවා වටිනාකමින් තිබීම නරක අදහසක් වනු ඇත) - ඔබට පහත තරමක් සරල හා කියවිය හැකි අනුවාදය භාවිතා කළ හැකිය 1 වන විකල්පයේ:
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;
කිරීමට සිදු විය
මෙන්න ඇන්ඩි ඊ ගේ විශිෂ්ට විසඳුම අංග සම්පූර්ණ jQuery ප්ලගිනයක් බවට පත්කිරීමේ මගේ පිහිය:
;(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');
ලෝක දෙකෙහිම හොඳම!
ඔබ හුදෙක් විමසුම් විග්රහ කිරීමට වඩා URL හැසිරවීමක් කරන්නේ නම්, ඔබට URI.js ප්රයෝජනවත් විය හැකිය . එය URL හැසිරවීම සඳහා පුස්තකාලයක් වන අතර එය සියලු සීනු හා විස්ල් සමඟ පැමිණේ. (මෙහි ස්වයං ප්රචාරණය සඳහා කණගාටුයි)
ඔබේ විමසුම් සිතියම බවට පරිවර්තනය කිරීමට:
var data = URI('?foo=bar&bar=baz&foo=world').query(true);
data == {
"foo": ["bar", "world"],
"bar": "baz"
}
(URI.js කැමති නරක විමසුම් ද නිවැරදි ?&foo&&bar=baz&
කරයි ?foo&bar=baz
)
var data = URI.parseQuery('?foo=bar&bar=baz&foo=world');
එකම ප්රති result ල සඳහාද කළ හැකිය ( ලියකියවිලි ).
මම කැමතියි රයන් ෆෙලන්ගේ විසඳුමට . නමුත් ඒ සඳහා jQuery දීර් ing කිරීමේ කිසිදු කරුණක් මා දකින්නේ නැද්ද? JQuery ක්රියාකාරීත්වයේ භාවිතයක් නොමැත.
අනෙක් අතට, මම Google Chrome: window.location.getParameter හි සාදන ලද ශ්රිතයට කැමතියි.
ඉතින් මෙය භාවිතා නොකරන්නේ ඇයි? හරි, වෙනත් බ්රව්සර් නොමැත. එබැවින් මෙම ශ්රිතය නොපවතී නම් එය නිර්මාණය කරමු:
if (!window.location.getParameter ) {
window.location.getParameter = function(key) {
function parseParams() {
var params = {},
e,
a = /\+/g, // Regex for replacing addition symbol with a space
r = /([^&=]+)=?([^&]*)/g,
d = function (s) { return decodeURIComponent(s.replace(a, " ")); },
q = window.location.search.substring(1);
while (e = r.exec(q))
params[d(e[1])] = d(e[2]);
return params;
}
if (!this.queryStringParams)
this.queryStringParams = parseParams();
return this.queryStringParams[key];
};
}
මෙම ශ්රිතය රයන් ෆෙලන්ගෙන් වැඩි හෝ අඩු වේ, නමුත් එය වෙනස් ආකාරයකින් ඔතා ඇත: පැහැදිලි නම සහ වෙනත් ජාවාස්ක්රිප්ට් පුස්තකාලවල යැපීම් නොමැත. මගේ බ්ලොග් අඩවියේ මෙම කාර්යය පිළිබඳ වැඩි විස්තර .
PHP G _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
!
මේ සියල්ලම විශිෂ්ට පිළිතුරු, නමුත් මට මීට වඩා ශක්තිමත් යමක් අවශ්ය වූ අතර, මා විසින් නිර්මාණය කරන ලද දේ ලබා ගැනීමට ඔබ සැවොම කැමති යැයි සිතුවා.
එය සරල පුස්තකාල ක්රමයක් වන අතර එය URL පරාමිතීන් වි ection ටනය කිරීම සහ හැසිරවීම සිදු කරයි. ස්ථිතික ක්රමයට පහත දැක්වෙන උප ක්රම ඇත, ඒවා විෂය URL වෙත කැඳවිය හැකිය:
උදාහරණයක්:
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('&'));
වැදගත්!අවසාන පේළියේ එම ශ්රිතය සඳහා පරාමිතිය වෙනස් වේ. අත්තනෝමතික URL එකක් එයට යැවිය හැකි ආකාරය පිළිබඳ උදාහරණයක් පමණි. වත්මන් URL විග්රහ කිරීමට ඔබට බ un නෝගේ පිළිතුරෙන් අවසාන පේළිය භාවිතා කළ හැකිය.
ඉතින් හරියටම වෙනස් වී ඇත්තේ කුමක්ද? Url ප්රති http://sb.com/reg/step1?param=
results ල සමඟ සමාන වේ. නමුත් url සමඟ බ un http://sb.com/reg/step1?param
නෝගේ විසඳුම යතුරු නොමැතිව වස්තුවක් ආපසු ලබා දෙන අතර මගේ යතුර යතුර param
සහ undefined
වටිනාකම සහිත වස්තුවක් ආපසු ලබා දෙයි.
විමසුම් නූලෙන් මට වස්තුවක් අවශ්ය වූ අතර මම බොහෝ කේත වලට වෛර කරමි. එය විශ්වයේ වඩාත්ම ශක්තිමත් නොවිය හැකි නමුත් එය කේත පේළි කිහිපයක් පමණි.
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
ඔබ එය ගබඩා කරන විට වටිනාකමටය - සහ තර්කානුකූලව යතුර ද වේ, නමුත් ඔබ ඒ තුළ අමුතු නූල් භාවිතා කිරීමට ඇති ඉඩකඩ අඩුය.
?a&b&c
නමුත් මෙය සැබවින්ම කියවිය හැකි ය (අහම්බෙන් මගේ පළමු අදහසට සමාන ය). එසේම split
එය අතිරික්තය, නමුත් මට අක්ෂර 10 කින් යුත් නූලක් දෙවරක් බෙදීමට වඩා ෆ්රයි කිරීමට විශාල කාර්ය සාධන මාළු ඇත.
location.search.substr(1)
වෙනුවට location.href.split('?')[1]
එහි පූරක අහුලා (වළක්වා ගැනීමට #anchor
පසුගිය විමසුම පරාමිතිය සමඟ).
location.search
!
මෙන්න ඇන්ඩි ඊ ගේ සම්බන්ධිත "අරා-ශෛලියේ විමසුම් නූල් හසුරුවන්න" -වර්ෂන් හි දීර් version සංස්කරණයකි. ස්ථාවර දෝෂය ( ?key=1&key[]=2&key[]=3
; 1
සමග අහිමි වූ අතර ප්රතිස්ථාපනය කරනු [2,3]
), ( "[" තත්වය, ආදිය recalculating, සාරධර්ම නැවත ප්රහේලිකාව ලිහා) සුළු කාර්ය සාධනය කිහිපයක් වැඩි දියුණු කළහ සහ (functionalized, සහයෝගය වැඩි දියුණු කිරීම රාශියක් එකතු ?key=1&key=2
, සහයෝගය ;
ක්රමයන්හි) . මම විචල්යයන් කරදරකාරී ලෙස කෙටියෙන් තැබුවෙමි, නමුත් ඒවා කියවිය හැකි වන පරිදි අදහස් විශාල ප්රමාණයක් එක් කළෙමි (ඔහ්, මම නැවත භාවිතා කළෙමිv
දේශීය කාර්යයන් තුළ , එය අවුල් සහගත නම් කණගාටුයි;).
එය පහත සඳහන් විමසුම් හසුරුවනු ඇත ...
? test = ආයුබෝවන් & පුද්ගලයා = නෙක් සහ පුද්ගලයා [] = ජෙෆ් සහ පුද්ගලයා [] = ජිම් සහ පුද්ගලයා [අමතර] = ජෝන් සහ ටෙස්ට් 3 සහ නොකාච් = 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
යතුර හඳුනාගත හැකි සහ වලංගු බැවින් (අවම වශයෙන් dotNet හි NameValueCollection.Add ):
ඉලක්කගත NameValueCollection නිදසුනෙහි නිශ්චිත යතුර දැනටමත් තිබේ නම්, නිශ්චිත අගය "අගය 1, අගය 2, අගය 3" ආකාරයෙන් දැනට පවතින කොමා මඟින් වෙන් කරන ලද අගයන් ලැයිස්තුවට එකතු කරනු ලැබේ.
පිරිවිතරයක් නොමැති බැවින් ජූරි සභාව නැවත නැවත යතුරු මත තරමක් දුරස් වී ඇති බව පෙනේ . මෙම අවස්ථාවේදී, බහු යතුරු (ව්යාජ) අරාවක් ලෙස ගබඩා කර ඇත. නමුත් මා එසේ නොකරන බව සලකන්න කොමාව මත පදනම් වූ අගයන් අරා වලට සකසන්නේ .
කේතය:
getQueryStringKey = function(key) {
return getQueryStringAsObject()[key];
};
getQueryStringAsObject = function() {
var b, cv, e, k, ma, sk, v, r = {},
d = function (v) { return decodeURIComponent(v).replace(/\+/g, " "); }, //# d(ecode) the v(alue)
q = window.location.search.substring(1), //# suggested: q = decodeURIComponent(window.location.search.substring(1)),
s = /([^&;=]+)=?([^&;]*)/g //# original regex that does not allow for ; as a delimiter: /([^&=]+)=?([^&]*)/g
;
//# ma(make array) out of the v(alue)
ma = function(v) {
//# If the passed v(alue) hasn't been setup as an object
if (typeof v != "object") {
//# Grab the cv(current value) then setup the v(alue) as an object
cv = v;
v = {};
v.length = 0;
//# If there was a cv(current value), .push it into the new v(alue)'s array
//# NOTE: This may or may not be 100% logical to do... but it's better than loosing the original value
if (cv) { Array.prototype.push.call(v, cv); }
}
return v;
};
//# While we still have key-value e(ntries) from the q(uerystring) via the s(earch regex)...
while (e = s.exec(q)) { //# while((e = s.exec(q)) !== null) {
//# Collect the open b(racket) location (if any) then set the d(ecoded) v(alue) from the above split key-value e(ntry)
b = e[1].indexOf("[");
v = d(e[2]);
//# As long as this is NOT a hash[]-style key-value e(ntry)
if (b < 0) { //# b == "-1"
//# d(ecode) the simple k(ey)
k = d(e[1]);
//# If the k(ey) already exists
if (r[k]) {
//# ma(make array) out of the k(ey) then .push the v(alue) into the k(ey)'s array in the r(eturn value)
r[k] = ma(r[k]);
Array.prototype.push.call(r[k], v);
}
//# Else this is a new k(ey), so just add the k(ey)/v(alue) into the r(eturn value)
else {
r[k] = v;
}
}
//# Else we've got ourselves a hash[]-style key-value e(ntry)
else {
//# Collect the d(ecoded) k(ey) and the d(ecoded) sk(sub-key) based on the b(racket) locations
k = d(e[1].slice(0, b));
sk = d(e[1].slice(b + 1, e[1].indexOf("]", b)));
//# ma(make array) out of the k(ey)
r[k] = ma(r[k]);
//# If we have a sk(sub-key), plug the v(alue) into it
if (sk) { r[k][sk] = v; }
//# Else .push the v(alue) into the k(ey)'s array
else { Array.prototype.push.call(r[k], v); }
}
}
//# Return the r(eturn value)
return r;
};
q = decodeURIComponent(window.location.search.substring(1)),
එය ද එය කිරීමට උපකාරී වේ.
මෙය මා කලකට පෙර නිර්මාණය කළ කාර්යයක් වන අතර මම ඒ ගැන සෑහීමකට පත්වෙමි. එය සිද්ධි සංවේදී නොවේ - එය පහසුය. එසේම, ඉල්ලූ QS නොපවතී නම්, එය හිස් නූලක් ලබා දෙයි.
මම මෙහි සම්පීඩිත අනුවාදයක් භාවිතා කරමි. සිදුවන්නේ කුමක්ද යන්න වඩා හොඳින් පැහැදිලි කිරීම සඳහා නවකතා වර්ග සඳහා මම සම්පීඩනය නොකර පළ කරමි.
වේගයෙන් වැඩ කිරීම සඳහා මෙය ප්රශස්තිකරණය කළ හැකි හෝ වෙනස් ආකාරයකින් කළ හැකි බව මට විශ්වාසයි, නමුත් එය සෑම විටම මට අවශ්ය දේ සඳහා විශිෂ්ට ලෙස ක්රියා කරයි.
විනෝද වන්න.
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 අපි දැන් නිකුත් කර ඇත්තෙමු . එය සාම්ප්රදායිකව එතරම් අපහසු වූ නමුත් දැන් ඔබට එය කළ හැකිය:
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
.
ඔබ Browserify භාවිතා කරන්නේ නම්, ඔබට Node.jsurl
වෙතින් මොඩියුලය භාවිතා කළ හැකිය :
var url = require('url');
url.parse('http://example.com/?bob=123', true).query;
// returns { "bob": "123" }
වැඩිදුර කියවීම: URL Node.js v0.12.2 අත්පොත සහ ප්රලේඛනය
සංස්කරණය කරන්න: ඔබට යූආර්එල් අතුරුමුහුණත භාවිතා කළ හැකිය , එය සෑම නව බ්රව්සරයකම පාහේ භාවිතා කර ඇති අතර කේතය පැරණි බ්රව්සරයක ක්රියාත්මක වීමට යන්නේ නම් ඔබට මේ වගේ පොලිෆිල් එකක් භාවිතා කළ හැකිය . විමසුම් පරාමිතීන් ලබා ගැනීමට URL අතුරුමුහුණත භාවිතා කරන්නේ කෙසේද යන්න පිළිබඳ කේත උදාහරණයක් මෙන්න (සෙවුම් පරාමිතීන්)
const url = new URL('http://example.com/?bob=123');
url.searchParams.get('bob');
ඔබට ඒ සඳහා URLSearchParams භාවිතා කළ හැකිය, URLSearchParams සමඟ එය කිරීමට MDN වෙතින් උදාහරණයක් මෙන්න:
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