Saya punya pengambil untuk mendapatkan nilai dari cookie.
Sekarang saya memiliki 2 cookie dengan nama shares=
dan nama obligations=
.
Saya ingin membuat pengambil ini hanya untuk mendapatkan nilai dari cookie kewajiban.
Bagaimana saya melakukan ini? Jadi for
membagi data menjadi nilai-nilai yang terpisah dan meletakkannya dalam array.
function getCookie1() {
// What do I have to add here to look only in the "obligations=" cookie?
// Because now it searches all the cookies.
var elements = document.cookie.split('=');
var obligations= elements[1].split('%');
for (var i = 0; i < obligations.length - 1; i++) {
var tmp = obligations[i].split('$');
addProduct1(tmp[0], tmp[1], tmp[2], tmp[3]);
}
}
javascript
cookies
Neuron
sumber
sumber
Jawaban:
Satu pendekatan, yang menghindari iterasi pada array, adalah:
Panduan
Memisahkan sebuah string dengan token akan menghasilkan, array dengan satu string (nilai yang sama), dalam kasus token tidak ada dalam string, atau array dengan dua string, dalam kasus token ditemukan dalam sebuah string.
Elemen pertama (kiri) adalah string dari apa yang sebelum token, dan yang kedua (kanan) adalah string dari apa yang setelah token.
(CATATAN: jika string dimulai dengan token, elemen pertama adalah string kosong)
Mempertimbangkan bahwa cookie disimpan sebagai berikut:
untuk mengambil nilai cookie tertentu, kita hanya perlu mendapatkan string setelah "; {name} =" dan sebelum next ";". Sebelum kami melakukan pemrosesan, kami menambahkan string cookie dengan ";", sehingga setiap nama cookie, termasuk yang pertama, dilampirkan dengan ";" dan "=":
Sekarang, kita dapat membaginya dengan "; {name} =", dan jika token ditemukan dalam string cookie (yaitu kita memiliki dua elemen), kita akan berakhir dengan elemen kedua menjadi string yang dimulai dengan nilai cookie kita. Lalu kita tarik itu dari array (yaitu pop), dan ulangi proses yang sama, tetapi sekarang dengan ";" sebagai token, tapi kali ini menarik keluar string kiri (yaitu shift) untuk mendapatkan nilai token yang sebenarnya.
sumber
IE 10+
juga memberikan kesalahan. Misalnya:"user"
:"Joe"
,"user_name"
:"Doe"
Saya lebih suka menggunakan satu kecocokan ekspresi reguler pada cookie:
ATAU Kami juga dapat menggunakannya sebagai fungsi, periksa kode di bawah ini.
Peningkatan berkat Scott Jungwirth dalam komentar.
sumber
xyz=value
danabcxyz=value
kapanname = xyz
.unescape((document.cookie.match(key + '=([^;].+?)(;|$)') || [])[1] || '');
Versi modifikasi Glize / dom / Cookiesnew RegExp('(^| )' + name + '=([^;]+)')
menghindari masalah yang diangkat oleh @BrentWashburne. Saya juga membuat tes jsperf untuk ini dan jawaban dengan suara terbanyak, yang ini keluar sedikit di atas, tetapi jelas lebih sedikit kode dan lebih mudah untuk diikuti: jsperf.com/simple-get-cookie-by-namenew RegExp('(^|;)' + name + '=([^;]+)')
? Diname
belakang dimulainya garis atau titik koma, mengapa spasi ``?gunakan skrip penerimaan cookie:
lalu sebut itu:
saya mencuri kode di atas dari halaman cookie quirksmode. Anda harus membacanya .
sumber
Jika Anda menggunakan jQuery, saya sarankan Anda untuk menggunakan plugin ini:
https://github.com/carhartl/jquery-cookie
https://github.com/carhartl/jquery-cookie/blob/master/jquery.cookie.js
Jadi Anda dapat membaca cookie seperti ini:
Anda juga dapat menulis cookie:
Hapus cookie:
sumber
Metode dalam beberapa jawaban lain yang menggunakan ekspresi reguler tidak mencakup semua kasus, terutama:
Metode berikut menangani kasus ini:
Ini akan kembali
null
jika cookie tidak ditemukan. Ini akan mengembalikan string kosong jika nilai cookie kosong.Catatan:
document.cookie
- Ketika ini muncul di sisi kanan tugas, itu mewakili string yang berisi daftar cookie yang dipisahkan dengan titik koma, yang pada gilirannyaname=value
berpasangan. Tampaknya ada ruang tunggal setelah setiap titik koma.String.prototype.match()
- Kembalinull
ketika tidak ditemukan kecocokan. Mengembalikan array ketika kecocokan ditemukan, dan elemen pada indeks[1]
adalah nilai dari kelompok yang cocok pertama.Catatan Ekspresi Reguler:
(?:xxxx)
- membentuk grup yang tidak cocok.^
- cocok dengan awal string.|
- Memisahkan pola alternatif untuk grup.;\\s*
- cocok dengan satu titik koma diikuti oleh nol atau lebih karakter spasi putih.=
- cocok dengan satu tanda sama dengan.(xxxx)
- membentuk grup yang cocok.[^;]*
- cocok dengan nol atau lebih karakter selain titik koma. Ini berarti akan cocok dengan karakter hingga, tetapi tidak termasuk, titik koma atau ke akhir string.sumber
function getCookie(name) { var match = document.cookie.match(RegExp('(?:^|;\\s*)' + name + '=([^;]*)')); return match ? match[1] : null; }
4 tahun kemudian, versi ES6 cara yang lebih sederhana.
Saya juga telah membuat inti untuk menggunakannya sebagai
Cookie
objek. misalnya,Cookie.set(name,value)
danCookie.get(name)
Ini membaca semua cookie alih-alih memindai. Tidak masalah untuk sejumlah kecil cookie.
sumber
Saya telah memodifikasi fungsi yang disediakan Jonathan di sini, dengan menggunakan ekspresi reguler Anda bisa mendapatkan nilai cookie dengan namanya seperti ini:
Jika mengembalikan string kosong itu berarti cookie itu ada tetapi tidak memiliki nilai, jika itu mengembalikan false maka cookie itu tidak ada. Saya harap ini membantu.
sumber
var
jalur 3?matched = ...
Berikut ini adalah satu liner untuk mendapatkan cookie dengan nama tertentu tanpa perlu lib eksternal:
Jawaban ini didasarkan pada solusi brilian kirlich . Satu-satunya kompromi dari solusi ini adalah, bahwa Anda akan mendapatkan string kosong ketika cookie tidak ada. Dalam kebanyakan kasus ini seharusnya tidak menjadi pemecah kesepakatan.
sumber
Saya tahu ini adalah pertanyaan lama tetapi saya juga menemukan masalah ini. Sekadar catatan, Ada sedikit API di halaman web pengembang mozilla .
Yoy bisa mendapatkan cookie apa pun dengan nama hanya menggunakan JS. Kode ini juga IMHO bersih (kecuali untuk garis panjang, yang saya yakin Anda dapat dengan mudah memperbaiki).
Sebagaimana dinyatakan dalam komentar, perhatikan bahwa metode ini mengasumsikan bahwa kunci dan nilai dikodekan menggunakan komponen encodeURIC (). Hapus decode & encodeURICon komponen () jika kunci dan nilai cookie tidak dikodekan.
sumber
encodeURIComponent()
ketika cookie itu ditetapkan, yang akan benar jika Anda menggunakan fungsi pendamping untuk mengatur cookie, tetapi mungkin tidak selalu demikian. testAnda dapat menggunakan perpustakaan js-cookie untuk mendapatkan dan mengatur cookie JavaScript.
Sertakan ke HTML Anda:
Untuk membuat Cookie:
Untuk membaca Cookie:
sumber
Ini adalah versi yang cukup singkat
Perhatikan bahwa saya menggunakan string template ES6 untuk membuat ekspresi regex.
sumber
var
,+
untuk menyatukan, dll -.- 'var
?Menggunakan
object.defineProperty
Dengan ini, Anda dapat dengan mudah mengakses cookie
Mulai sekarang Anda bisa melakukan:
Ini akan secara otomatis memperbarui juga, jadi jika Anda mengganti cookie, itu juga
Cookies
akan berubah.sumber
cookies[(cookie.split("=")[0]).replace(/ /g,'')] = ..
. Terima kasih!!kirlich memberikan solusi yang bagus. Namun, gagal ketika ada dua nilai cookie dengan nama yang mirip, berikut adalah perbaikan sederhana untuk situasi ini:
sumber
selalu bekerja dengan baik:
Tidak ada persyaratan untuk jQuery atau apapun. JavaScript tua yang baik dan murni.
sumber
sumber
Fungsi sederhana untuk Dapatkan cookie dengan nama cookie:
sumber
Rupanya MDN belum pernah mendengar tentang kelas karakter regex kata-batas
\b
, yang cocok dengan yang berdekatan\w+
yang terikat di kedua sisi dengan\W+
:sumber
Menurut saya, Anda dapat membagi pasangan nilai kunci cookie menjadi array dan mendasarkan pencarian Anda pada hal itu:
Yang menjalankan sebagai berikut:
Fiddle: http://jsfiddle.net/qFmPc/
Atau mungkin bahkan yang berikut ini:
sumber
function getCookieData( name ) { var patrn = new RegExp( "(?:^| )" + name + "=(.*?)(?:;|$)" ); if ( match = (document.cookie.match(patrn) )) return match[1]; return false; }
Dalam proyek saya, saya menggunakan fungsi berikut untuk mengakses cookie berdasarkan nama
sumber
Jika Anda hanya perlu memeriksa apakah ada cookie, lakukan saja ini:
jika cookie yang dicatat = true ada, Anda akan mendapatkan 2, jika tidak 1.
login = true - ubah ini menjadi cookie Anda name = value, atau hanya nama
sumber
.indexOf() >= 0
?Sudah ada jawaban bagus di sini untuk mendapatkan cookie, Namun di sini ada solusi sendiri:
penggunaan: `
sumber
diatur oleh javascript
dapatkan dengan jquery dengan plugin jquery-cookie
sumber
referensi: https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie
sumber
Solusi saya adalah ini:
Fungsi ini menggunakan fungsi Underscorejs _.find. Pengembalian tidak terdefinisi jika nama cookie tidak ada
sumber
Saya telah melakukannya dengan cara ini. sehingga saya mendapatkan objek untuk mengakses untuk memisahkan nilai-nilai. Dengan ini, Anda dapat meneruskan cookie ke induk dan kemudian Anda dapat mengakses nilai-nilai Anda dengan tombol seperti
sumber
Pendekatan fungsional untuk menemukan cookie yang ada. Ini mengembalikan array, sehingga mendukung banyak kejadian dengan nama yang sama. Itu tidak mendukung pencocokan kunci parsial, tetapi sepele untuk mengganti === dalam filter dengan regex.
sumber
Cukup gunakan fungsi berikut (kode javascript murni)
sumber
Dapatkan cookie dengan nama, cukup berikan nama cookie ke fungsi di bawah ini
sumber
Fungsi berikut akan mengembalikan
key-value
sepasang cookie yang diperlukan, di manakey
nama cookie danvalue
akan menjadi nilai cookie.sumber
Contoh cookie: contoh JS:
Menyimpan array dan objek dengan json atau xml
sumber