En kısa JavaScript ile bir cookie okuma fonksiyonu
JavaScript ile bir çerez okumak için en kısa, doğru ve çapraz tarayıcı uyumlu yöntemi nedir?
Çok sık, bir süre bina tek başına bir komut (burada yapamam herhangi bir dış bağımlılıkları), buluyorum kendimi ekleme bir işlev için okuma çerezler, ve genellikle sonbahar-geri QuirksMode.org readCookie()
yöntem (280 byte, 216 minified.)
function readCookie(name) {
var nameEQ = name "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i ) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
Bu iş, ama onun çirkin ve kabartmak biraz her zaman ekler.
Bu gibi jQuery.cookie kullandığı yöntem bir şey (değiştirilmiş, 165 bayt, 125 minified):
function read_cookie(key)
{
var result;
return (result = new RegExp('(?:^|; )' encodeURIComponent(key) '=([^;]*)').exec(document.cookie)) ? (result[1]) : null;
}
Notbu bir 'Kod Golf' rekabet: readCookie benim görevim boyutunu azaltmada yasal olarak ilgileniyorum, ve geçerli. ben çözümünü sağlamak değil
CEVAP
Bu sadece hiç belge vuracaktır.çerez BİR zaman. Sonraki her istek anında olacak.
(function(){
var cookies;
function readCookie(name,c,C,i){
if(cookies){ return cookies[name]; }
c = document.cookie.split('; ');
cookies = {};
for(i=c.length-1; i>=0; i--){
C = c[i].split('=');
cookies[C[0]] = C[1];
}
return cookies[name];
}
window.readCookie = readCookie; // or expose it however you want
})();
Gerçekten tarayıcı bağımlı olan .forEach
(o zaman bile bu kadar kurtarmıyorsun) kullanmakta özgürsün tabii bu genel mantık daha hızlı bir yolu yok maalesef
Kendi örnek biraz 120 bytes
sıkıştırılmış:
function read_cookie(k,r){return(r=RegExp('(^|; )' encodeURIComponent(k) '=([^;]*)').exec(document.cookie))?r[2]:null;}
Eğer encodeURIComponent
düşürürsen eğer 1 harfli isim bir işlev yaparsanız 110 bytes
, 90 bytes
alabilirsiniz.
73 bytes
, ama sonra Ekleme encodeURIComponent
readCookie
102 bytes
adlı 82 bytes
adil oldum:
function C(k){return(document.cookie.match('(^|; )' k '=([^;]*)')||0)[2]}
lider bang ! javascript fonksiyonu söz...
Son kullanma tarihi olmayan Javascript...
() toRad Javascript fonksiyonu hata at...
Bir dizi `length` özelliği okuma gerçe...
Bir JavaScript fonksiyonu parametre ol...