На случай, если кому-то еще это понадобится, я исправил код Диодея , чтобы устранить озабоченность PhiLho частичными совпадениями при попытке получить значение cookie.
function getCookie(c_name) {
var nameEQ = c_name + '=';
var c_start = 0;
var c_end = 0;
if (document.cookie.substr(0, nameEQ.length) === nameEQ) {
return document.cookie.substring(nameEQ.length, document.cookie.indexOf(';', nameEQ.length));
} else {
c_start = document.cookie.indexOf('; ' + nameEQ);
if(c_start !== -1){
c_start += nameEQ.length + 2;
c_end = document.cookie.indexOf(';', c_start);
if (c_end === -1) {c_end = document.cookie.length;}
return document.cookie.substring(c_start, c_end);
}
}
return null;
}
Недавно я также создал гораздо более компактный RegExp, который также должен работать:
function getCookie(c_name){
var ret = window.testCookie.match(new RegExp("(?:^|;)\\s*"+c_name+"=([^;]*)"));
return (ret !== null ? ret[1] : null);
}
Я провел несколько тестов скорости, которые, по-видимому, указывают на то, что из PhiLo, QuirksMode и этих двух реализаций версия, отличная от RegExp (использующая indexOf очень быстрая, а не удивительная) выше, является самой быстрой. http://jsperf.com/cookie-fetcher