2010-02-10 4 views
13

J'utilise le "Cookie Plugin" by Klaus Hartl pour ajouter ou mettre à jour des cookies au $(document).ready. J'ai un autre événement qui est censé répéter tous les cookies et faire quelque chose avec la valeur de chaque cookie. Comment puis-je parcourir la collection de cookies et obtenir l'identifiant et la valeur de chacun?Comment puis-je itérer sur les cookies en utilisant jquery (ou juste javascript)?

Je pense quelque chose comme ceci:

$.cookie.each(function(id, value) { 
      alert('ID='+id+' VAL='+value); 
     }); 

Répondre

18

Si vous voulez juste regarder les cookies qu'il n'est pas difficile sans un supplément plugin:

$.each(document.cookie.split(/; */), function() { 
    var splitCookie = this.split('='); 
    // name is splitCookie[0], value is splitCookie[1] 
}); 
+0

Excellente solution. Split avec regex est beaucoup mieux. –

+1

Tout est correct sauf la définition de la fonction dans la première ligne. Changez la fonction (cookieString) en function (index, cookieString) et vous l'avez! –

+1

oh right - désolé! Aussi, je pense que jQuery lie "ceci" à chaque élément, donc vous pouvez aussi le laisser et juste "split" dans la fonction. – Pointy

3

bien, il est assez facile en javascript simple:

var keyValuePairs = document.cookie.split(';'); 
for(var i = 0; i < keyValuePairs.length; i++) { 
    var name = keyValuePairs[i].substring(0, keyValuePairs[i].indexOf('=')); 
    var value = keyValuePairs[i].substring(keyValuePairs[i].indexOf('=')+1); 
} 
+1

faites attention aux espaces principaux! Vous devriez diviser avec l'expression rationnelle /; */au lieu de simplement la chaîne ';'. – Pointy

+0

tout à fait raison, merci de le signaler, pointu –

+0

J'aime cette solution parce qu'elle permet des signes égaux dans les valeurs de cookie. – spb

0

L'autre solution crée des espaces blancs avant le nom, ce qui rend difficile le débogage les erreurs.

var keyValuePairs = document.cookie.split(/; */); 
for(var i = 0; i < keyValuePairs.length; i++) { 
    var name = keyValuePairs[i].substring(0, keyValuePairs[i].indexOf('=')); 
    var value = keyValuePairs[i].substring(keyValuePairs[i].indexOf('=')+1); 
    ... 
Questions connexes