Imam getter za pridobitev vrednosti iz piškotka.
Zdaj imam dva piškotka z imenom shares=
in z imenom obligations=
.
Želim, da ta getter pridobi samo vrednosti iz piškotka obveznosti.
Kako naj to storim? Torej za
razdeli podatke na ločene vrednosti in jih postavi v polje.
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]);
}
}
Eden od pristopov, ki se izogne iteraciji po polju, je:
function getCookie(name) {
var value = "; " + document.cookie;
var parts = value.split("; " + name + "=");
if (parts.length == 2) return parts.pop().split(";").shift();
}
Prehod
Pri deljenju niza po žetonu bo nastalo bodisi polje z enim nizom (enaka vrednost), če žetona v nizu ni, bodisi polje z dvema nizoma, če je žeton v nizu.
Prvi (levi) element je niz, ki je bil pred žetonom, drugi (desni) pa je niz, ki je bil za žetonom.
(OPOMBA: če se niz začne s simbolom, je prvi element prazen niz)
Če upoštevamo, da so piškotki shranjeni na naslednji način:
"{name}={value}; {name}={value}; ..."
da bi pridobili določeno vrednost piškotka, moramo samo dobiti niz, ki je za "; {name}=" in pred naslednjim ";". Preden opravimo kakršno koli obdelavo, niz piškotkov vnaprej opremimo z "; ", tako da je vsako ime piškotka, vključno s prvim, zaprto z "; " in "=":
"; {name}={value}; {name}={value}; ..."
Zdaj lahko najprej razdelimo z "; {naslov}=", in če je žeton najden v nizu piškotkov (tj. imamo dva elementa), bo na koncu drugi element niz, ki se začne z našo vrednostjo piškotka. Tega nato izvlečemo iz polja (tj. pop) in ponovimo isti postopek, vendar zdaj z ";" kot žetonom, vendar tokrat izvlečemo levi niz (tj. shift), da dobimo dejansko vrednost žetona.
uporabite skript za pridobivanje piškotkov:
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;
}
nato jo pokličite:
var value = readCookie('obligations');
zgornjo kodo sem ukradel iz strani quirksmode cookies. morate jo prebrati.
Zdi se mi, da bi lahko pare ključ-vrednost piškotkov razdelili v polje in na podlagi tega izvedli iskanje:
var obligations = getCookieData("obligations");
Kar pomeni, da se izvede naslednje:
function getCookieData( name ) {
var pairs = document.cookie.split("; "),
count = pairs.length, parts;
while ( count-- ) {
parts = pairs[count].split("=");
if ( parts[0] === name )
return parts[1];
}
return false;
}
Skripec:
Ali morda celo naslednje:
function getCookieData( name ) {
var patrn = new RegExp( "^" + name + "=(.*?);" ),
patr2 = new RegExp( " " + name + "=(.*?);" );
if ( match = (document.cookie.match(patrn) || document.cookie.match(patr2)) )
return match[1];
return false;
}