Apakah ada plugin-kurang cara mengambil string nilai-nilai melalui jQuery (atau tanpa)?
Jika demikian, bagaimana? Jika tidak, apakah ada plugin yang bisa melakukannya?
Update: Sep-2018
Anda dapat menggunakan URLSearchParams yang sederhana dan memiliki layak (tapi tidak lengkap) dukungan browser.
const urlParams = new URLSearchParams(window.location.search);
const myParam = urlParams.get('myParam');
Asli
Anda don't perlu jQuery untuk tujuan itu. Anda dapat menggunakan hanya beberapa murni JavaScript:
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, ' '));
}
Penggunaan:
// 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)
Catatan: Jika sebuah parameter hadir beberapa kali (?foo=lorem&foo=ipsum
), anda akan mendapatkan nilai pertama (lorem
). Tidak ada standar tentang hal ini dan penggunaan yang berbeda-beda, seperti misalnya pertanyaan ini: Berwibawa posisi duplikat HTTP MENDAPATKAN query keys.
CATATAN: fungsi ini case-sensitive. Jika anda lebih suka case-sensitive nama parameter, add 'i' pengubah untuk RegExp
Ini adalah update yang berbasis di new URLSearchParams spesifikasi untuk mencapai hasil yang sama lebih ringkas. Melihat jawaban yang berjudul "URLSearchParams" di bawah ini.
Beberapa solusi yang diposting di sini adalah tidak efisien. Mengulangi ekspresi reguler pencarian setiap kali script kebutuhan untuk mengakses parameter adalah benar-benar tidak perlu, salah satu fungsi tunggal untuk berpisah parameter ke asosiatif array gaya objek yang cukup. Jika anda're tidak bekerja dengan HTML 5 Sejarah API, ini hanya diperlukan sekali per beban halaman. Lainnya saran di sini juga gagal untuk memecahkan kode URL dengan benar.
var urlParams;
(jendela.onpopstate = function () {
var pertandingan,
pl = /\+/g, // dengan Regex untuk mengganti penambahan simbol dengan ruang
pencarian = /([^&=]+)=?([^&]*)/g,
decode = fungsi (s) { return decodeURIComponent(s.replace(pl ", ")); },
query = window.location.search.substring(1);
urlParams = {};
while (match = search.<a href="https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/RegExp/exec">exec</a>(query))
urlParams[decode(match[1])] = decode(match[2]);
})();
Contoh querystring:
?i=utama&mode=depan&sid=de8d49b78a85a322c4155015fdce22c4&enc=+Halo%20&kosong
Hasilnya:
urlParams = {
enc: " Hello ",
i: "main",
mode: "front",
sid: "de8d49b78a85a322c4155015fdce22c4",
empty: ""
}
alert(urlParams["mode"]);
// -> "front"
alert("empty" in urlParams);
// -> true
Hal ini dapat dengan mudah diperbaiki untuk menangani array-gaya query string juga. Contoh dari hal ini adalah di sini, tapi karena style array parameter aren't didefinisikan pada RFC 3986 I won't mencemari jawaban ini dengan kode sumber. Bagi mereka yang tertarik dalam "tercemar" versi, lihat campbeln's jawaban di bawah ini.
Juga, seperti yang ditunjukkan di komentar, ;
hukum pembatas untuk key=value
pasang. Ini akan membutuhkan lebih rumit regex untuk menangani ;
atau &
, yang saya pikir tidak perlu karena itu's jarang bahwa ;
digunakan dan saya akan mengatakan bahkan lebih tidak mungkin bahwa keduanya akan digunakan. Jika anda perlu dukungan ;
bukan &
, hanya swap mereka dalam regex.
<script>var urlParams = <?php echo json_encode($_GET, JSON_HEX_TAG);?>;</script>
Jauh lebih sederhana!
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('&'));
Dengan URL seperti ?topik=123&nama=query+string
, berikut ini akan kembali:
qs["topic"]; // 123
qs["name"]; // query string
qs["nothere"]; // undefined (object)
Merobek Google's kode saya menemukan metode yang mereka gunakan: 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
}
Hal ini dikaburkan, tetapi hal ini dapat dimengerti. Itu tidak bekerja karena beberapa variabel yang tidak terdefinisi.
Mereka mulai mencari parameter pada url dari ?
dan juga dari pagar #
. Kemudian untuk masing-masing parameter mereka dibagi dalam tanda sama b[f][p]("=")
(yang tampak seperti indexOf
, mereka menggunakan posisi char untuk mendapatkan key/value). Setelah itu membagi mereka memeriksa apakah parameter memiliki nilai atau tidak, jika tidak maka mereka menyimpan nilai d
, jika tidak mereka hanya melanjutkan.
Di akhir objek d
adalah kembali, penanganan melarikan diri dan tanda+
. Objek ini seperti saya, memiliki perilaku yang sama.
Metode saya sebagai plugin 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);
Penggunaan
//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));
Penyusunan kode: metode deklarasi
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");
Pengujian di Firefox 4.0 x86 pada Windows Server 2008 R2 / 7 x64
Versi perbaikan dari Artem Barger's jawaban:
function getParameterByName(name) {
var match = RegExp('[?&]' + name + '=([^&]*)').exec(window.location.search);
return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
}
Untuk informasi lebih lanjut tentang perbaikan seperti: http://james.padolsey.com/javascript/bujs-1-getparameterbyname/
Firefox 44+, Opera 36+, Edge 17+, Safari 10.3+ dan Chrome 49+ mendukung URLSearchParams API:
Ada google-disarankan URLSearchParams polyfill untuk versi stabil YAITU.
Hal ini tidak standar oleh W3C, tapi itu adalah standar hidup oleh WhatWG.
Anda dapat menggunakannya pada lokasi
:
let params = new URLSearchParams(location.search);
atau
let params = (new URL(location)).searchParams;
Atau tentu saja pada setiap URL:
let url = new URL('https://example.com?foo=1&bar=2');
let params = new URLSearchParams(url.search);
Anda bisa mendapatkan params juga menggunakan singkatan .searchParams
properti pada URL object, seperti ini:
let params = new URL('https://example.com?foo=1&bar=2').searchParams;
params.get('foo'); // "1"
params.get('bar'); // "2"
Anda baca/parameter yang ditetapkan melalui get(KEY)
, set(KUNCI, NILAI)
, append(KEY, VALUE)
API. Anda juga dapat iterate atas semua nilai-nilai untuk (biarkan p params) {}
.
A implementasi referensi dan halaman contoh yang tersedia untuk audit dan pengujian.
Hanya rekomendasi lain. Plugin Purl memungkinkan untuk mengambil semua bagian dari URL, seperti jangkar, host, dll.
Hal ini dapat digunakan dengan atau tanpa jQuery.
Penggunaan sangat sederhana dan keren:
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'
Namun, pada Nov 11, 2014, Purl tidak lagi dipertahankan dan penulis merekomendasikan menggunakan URI.js sebagai gantinya. Plugin jQuery ini berbeda dalam bahwa ini berfokus pada elemen - untuk penggunaan dengan string, hanya menggunakan URI
secara langsung, dengan atau tanpa jQuery. Kode yang sama akan terlihat seperti itu, fuller docs di sini:
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'
Cepat, solusi lengkap, yang menangani multivalued kunci dan dikodekan karakter.
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
})
Apa semua ini kode... "null-penggabungan", short-circuit evaluasi ES6 Destructuring tugas, Panah fungsi, Template string
"?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"
ke mengakses bagian yang berbeda dari sebuah URL menggunakan lokasi.(pencarian|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
Sederhana tombol check (item di 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.kunci[index]
atau qd[key][index]
> qd
a: ["1", "5"]
b: ["0"]
c: ["3"]
d: [undefined]
e: [undefined]
Gunakan decodeURIComponent()
untuk kedua atau keduanya perpecahan.
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"]
v = v && decodeURIComponent(v);
Jika querystring kosong (lokasi.pencarian == ""
), hasil ini agak menyesatkan qd == {"": tidak terdefinisi}
. Disarankan untuk memeriksa querystring sebelum meluncurkan parsing fungsi likeso:
if (location.search) location.search.substr(1).split("&").forEach(...)
Roshambo di snipplr.com memiliki sebuah script sederhana untuk mencapai hal ini dijelaskan dalam Mendapatkan Parameter URL dengan jQuery | Peningkatan. Dengan script-nya anda juga dengan mudah bisa keluar hanya parameter yang anda inginkan.
Berikut ini's inti:
$.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;
}
Kemudian anda hanya mendapatkan parameter dari query string.
Jadi jika URL/query string xyz.com/index.html?lang=de
.
Sebut saja var langval = $.urlParam('lang');
, dan anda've got it.
UZBEKJON memiliki post di blog ini juga, Mendapatkan parameter URL & nilai-nilai dengan jQuery.
Jika anda're menggunakan jQuery, anda dapat menggunakan perpustakaan, seperti jQuery BBQ: Tombol Back & Query Perpustakaan.
...jQuery BBQ menyediakan penuh
.deparam()
metode, bersama dengan kedua hash manajemen negara, dan fragmen / query string mengurai dan utilitas yang menggabungkan metode.
Edit: Menambahkan Deparam Contoh:
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();
}
};
Jika anda hanya ingin menggunakan JavaScript biasa, anda bisa menggunakan...
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;
}
})();
Karena baru HTML Sejarah API dan khusus sejarah.pushState()
dan sejarah.replaceState()
, URL dapat mengubah yang akan membatalkan cache parameter dan nilai-nilai mereka.
Versi ini akan memperbarui cache internal dari masing-masing parameter waktu sejarah perubahan.
Hanya menggunakan dua split:
function get(n) {
var half = location.search.split(n + '=')[1];
return half !== undefined ? decodeURIComponent(half.split('&')[0]) : null;
}
Saya membaca semua sebelumnya dan lebih lengkap jawaban. Tapi saya pikir itu adalah yang paling sederhana dan metode yang lebih cepat. Anda dapat check-in ini jsPerf benchmark
Untuk memecahkan masalah dalam Rup's komentar, tambahkan bersyarat split dengan mengubah baris pertama ke dua di bawah ini. Tapi akurasi mutlak berarti's sekarang lebih lambat dari regexp (lihat 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;
}
Jadi jika anda tahu anda tidak't berjalan ke Rup's counter-kasus, ini yang menang. Jika tidak, regexp.
Atau jika anda memiliki kontrol dari querystring dan dapat menjamin bahwa nilai anda mencoba untuk mendapatkan akan pernah berisi URL yang dikodekan karakter (ini di nilai akan menjadi ide yang buruk) - anda dapat menggunakan berikut sedikit lebih sederhana dan mudah dibaca versi pilihan 1:
fungsi getQueryStringValueByName(nama) { var queryStringFromStartOfValue = lokasi.pencarian.split(nama + '=')1; kembali queryStringFromStartOfValue !== undefined ? queryStringFromStartOfValue.split('&')[0] : null;
Berikut ini's my menusuk membuat Andy E's solusi yang sangat baik menjadi matang penuh plugin 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);
Sintaksnya adalah:
var someVar = $.getQueryString('myParam');
Terbaik dari kedua dunia!
Jika anda're melakukan lebih banyak URL manipulasi dari hanya parsing querystring, anda mungkin menemukan URI.js membantu. Itu adalah sebuah perpustakaan untuk memanipulasi Url - dan dilengkapi dengan semua lonceng dan peluit. (Maaf untuk diri sendiri-iklan di sini)
untuk mengkonversi querystring ke dalam peta:
var data = URI('?foo=bar&bar=baz&foo=world').query(true);
data == {
"foo": ["bar", "world"],
"bar": "baz"
}
(URI.js juga "perbaikan" buruk querystrings seperti ?&foo&&bar=baz&
untuk ?foo&bar=baz
)
Saya suka Ryan Phelan's solusi. Tapi aku don't melihat setiap titik memperpanjang jQuery untuk itu? Tidak ada penggunaan fungsi jQuery.
Di sisi lain, saya suka built-in fungsi di Google Chrome: jendela.lokasi hotel ini.text / html.
Jadi mengapa tidak menggunakan ini? Oke, browser lain don't memiliki. Jadi let's membuat fungsi ini jika tidak ada:
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];
};
}
Fungsi ini lebih atau kurang dari Ryan Phelan, tapi itu dibungkus berbeda: nama jelas dan tidak ada ketergantungan dari perpustakaan javascript lainnya. Lebih lanjut tentang fungsi ini di blog saya.
Berikut ini adalah cara cepat untuk mendapatkan sebuah benda yang mirip dengan PHP $_GET array:
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;
}
Penggunaan:
var $_GET = get_query();
Untuk query string x=5&y&z=halo&x=6
ini kembali objek:
{
x: "6",
y: undefined,
z: "hello"
}
Tetap sederhana dalam biasa kode JavaScript:
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];
}
Panggilan dari mana saja di dalam kode JavaScript:
var result = qs('someKey');
Ini semua adalah jawaban yang besar, tapi aku butuh sesuatu yang sedikit lebih kuat, dan pikiran anda semua yang mungkin ingin memiliki apa yang saya buat.
Itu adalah sebuah perpustakaan sederhana metode yang melakukan pembedahan dan manipulasi URL parameter. Metode statis memiliki sub berikut metode yang dapat disebut pada subjek URL:
Contoh:
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>');
Saya menggunakan ekspresi reguler yang banyak, tapi tidak untuk itu.
Tampaknya lebih mudah dan lebih efisien untuk saya untuk membaca string query sekali dalam aplikasi saya, dan membangun sebuah objek dari semua pasangan kunci/nilai seperti:
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;
}();
Untuk URL seperti http://domain.com?param1=val1¶m2=val2
anda bisa mendapatkan nilai mereka nanti dalam kode anda sebagai cari.param1
dan cari.param2
.
Kode golf:
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]);
}
Tampilan itu!
for (i in a) {
document.write(i + ":" + a[i] + "<br/>");
};
Di Mac saya: test.htm?i=dapat&memiliki=cheezburger
menampilkan
0:can
1:cheezburger
i:can
has:cheezburger
Roshambo metode jQuery itu't merawat decode URL
Hanya menambahkan kemampuan itu juga sambil menambahkan dalam pernyataan return
return decodeURIComponent(results[1].replace(/\+/g, " ")) || 0;
Sekarang anda dapat menemukan diperbarui gist:
$.urlParam = function(name){
var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href);
if (!results) { return 0; }
return decodeURIComponent(results[1].replace(/\+/g, " ")) || 0;
}