J'ai un getter pour obtenir la valeur d'un cookie.
Maintenant, j'ai 2 cookies par le nom shares=
et par le nom obligations=
.
Je veux faire ce getter uniquement pour obtenir les valeurs du cookie d'obligations.
Comment puis-je faire cela? Le for
divise donc les données en valeurs distinctes et les place dans un tableau.
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
Neurone
la source
la source
Réponses:
Une approche, qui évite d'itérer sur un tableau, serait:
Procédure pas à pas
Le fractionnement d'une chaîne par jeton produira soit un tableau avec une chaîne (même valeur), dans le cas où le jeton n'existe pas dans une chaîne, soit un tableau avec deux chaînes, dans le cas où le jeton se trouve dans une chaîne.
Le premier élément (à gauche) est une chaîne de ce qui était avant le jeton, et le second (à droite) est ce qui est une chaîne de ce qui était après le jeton.
(REMARQUE: si la chaîne commence par un jeton, le premier élément est une chaîne vide)
Considérant que les cookies sont stockés comme suit:
afin de récupérer une valeur de cookie spécifique, nous avons juste besoin d'obtenir une chaîne qui se trouve après "; {name} =" et avant ""; Avant d'effectuer tout traitement, nous ajoutons la chaîne de cookies avec ";", de sorte que chaque nom de cookie, y compris le premier, soit entouré de ";" et "=":
Maintenant, nous pouvons d'abord diviser par "; {name} =", et si le jeton est trouvé dans une chaîne de cookie (c'est-à-dire que nous avons deux éléments), nous finirons avec le deuxième élément étant une chaîne qui commence par notre valeur de cookie. Ensuite, nous retirons cela d'un tableau (ie pop), et répétons le même processus, mais maintenant avec ";" comme un jeton, mais cette fois en tirant sur la chaîne de gauche (c'est-à-dire shift) pour obtenir la valeur réelle du jeton.
la source
IE 10+
donne également une erreur. Par exemple:"user"
:"Joe"
,"user_name"
:"Doe"
Je préférerais utiliser une seule correspondance d'expression régulière sur le cookie:
OU Nous pouvons également utiliser une fonction, vérifiez le code ci-dessous.
Amélioration grâce à Scott Jungwirth dans les commentaires.
la source
xyz=value
etabcxyz=value
quandname = xyz
.unescape((document.cookie.match(key + '=([^;].+?)(;|$)') || [])[1] || '');
Version modifiée de Glize / dom / Cookiesnew RegExp('(^| )' + name + '=([^;]+)')
éviter le problème soulevé par @BrentWashburne. J'ai également fait un test jsperf pour cela et la réponse avec les votes les plus élevés, celui-ci sort légèrement en haut, mais est certainement moins de code et plus facile à suivre: jsperf.com/simple-get-cookie-by-namenew RegExp('(^|;)' + name + '=([^;]+)')
? L'name
arrière du début d'une ligne ou d'un point-virgule, pourquoi un espace ``?utiliser un script d'obtention de cookies:
puis appelez-le:
J'ai volé le code ci-dessus sur la page des cookies quirksmode. vous devriez le lire .
la source
Si vous utilisez jQuery, je vous recommande d'utiliser ce plugin:
https://github.com/carhartl/jquery-cookie
https://github.com/carhartl/jquery-cookie/blob/master/jquery.cookie.js
Vous pouvez donc lire un cookie comme celui-ci:
Vous pouvez également écrire un cookie:
Supprimer le cookie:
la source
Les méthodes de certaines des autres réponses qui utilisent une expression régulière ne couvrent pas tous les cas, en particulier:
La méthode suivante gère ces cas:
Cela reviendra
null
si le cookie n'est pas trouvé. Il renverra une chaîne vide si la valeur du cookie est vide.Remarques:
document.cookie
- Lorsque cela apparaît sur le côté droit d'une affectation, cela représente une chaîne contenant une liste de cookies séparés par des points-virgules, qui sont à leur tour desname=value
paires. Il semble y avoir un seul espace après chaque point-virgule.String.prototype.match()
- Retournenull
lorsqu'aucune correspondance n'est trouvée. Renvoie un tableau lorsqu'une correspondance est trouvée, et l'élément à index[1]
est la valeur du premier groupe correspondant.Notes d'expression régulière:
(?:xxxx)
- forme un groupe qui ne correspond pas.^
- correspond au début de la chaîne.|
- sépare les modèles alternatifs pour le groupe.;\\s*
- correspond à un point-virgule suivi de zéro ou plusieurs espaces.=
- correspond à un signe égal.(xxxx)
- forme un groupe correspondant.[^;]*
- correspond à zéro ou plusieurs caractères autres qu'un point-virgule. Cela signifie qu'il fera correspondre les caractères jusqu'à, mais sans inclure, un point-virgule ou jusqu'à la fin de la chaîne.la source
function getCookie(name) { var match = document.cookie.match(RegExp('(?:^|;\\s*)' + name + '=([^;]*)')); return match ? match[1] : null; }
4 ans plus tard, version ES6 façon plus simple.
J'ai également créé un aperçu pour l'utiliser comme
Cookie
objet. par exemple,Cookie.set(name,value)
etCookie.get(name)
Cela a lu tous les cookies au lieu de les parcourir. C'est ok pour un petit nombre de cookies.
la source
J'ai modifié la fonction fournie par Jonathan ici, en utilisant une expression régulière, vous pouvez obtenir une valeur de cookie par son nom comme ceci:
S'il renvoie une chaîne vide, cela signifie que le cookie existe mais n'a aucune valeur, s'il renvoie false, le cookie n'existe pas. J'espère que ça aide.
la source
var
ligne 3?matched = ...
Voici une ligne pour obtenir un cookie avec un nom spécifique sans avoir besoin d'une bibliothèque externe:
Cette réponse est basée sur la brillante solution de Kirlich . Le seul compromis de cette solution est que vous obtiendrez une chaîne vide lorsque le cookie n'existe pas. Dans la plupart des cas, cela ne devrait cependant pas être une rupture.
la source
Je sais que c'est une vieille question mais j'ai aussi rencontré ce problème. Juste pour mémoire, il y a une petite API dans la page Web des développeurs mozilla .
Vous pouvez obtenir n'importe quel cookie par son nom en utilisant uniquement JS. Le code est également plus propre à mon humble avis (sauf pour la longue ligne, que je suis sûr que vous pouvez facilement corriger).
Comme indiqué dans les commentaires, sachez que cette méthode suppose que la clé et la valeur ont été codées à l'aide d'encodeURIComponent (). Supprimez decode & encodeURIComponent () si la clé et la valeur du cookie n'ont pas été codées.
la source
encodeURIComponent()
lorsque le cookie a été défini, ce qui sera vrai si vous utilisez la fonction associée pour définir le cookie, mais ce n'est pas toujours le cas. testVous pouvez utiliser la bibliothèque js-cookie pour obtenir et définir des cookies JavaScript.
Inclure dans votre HTML:
Pour créer un cookie:
Pour lire un cookie:
la source
Voici une version assez courte
Notez que j'ai utilisé les chaînes de modèle d'ES6 pour composer l'expression d'expression régulière.
la source
var
,+
pour concaténer, etc. -.- 'var
?Utilisation
object.defineProperty
Avec cela, vous pouvez facilement accéder aux cookies
À partir de maintenant, vous pouvez simplement faire:
Cela sera également mis à jour automatiquement, donc si vous modifiez un cookie, le
Cookies
changera également.la source
cookies[(cookie.split("=")[0]).replace(/ /g,'')] = ..
. Merci!!kirlich a donné une bonne solution. Cependant, il échoue lorsqu'il y a deux valeurs de cookie avec des noms similaires, voici une solution simple à cette situation:
la source
fonctionne toujours bien:
Aucune exigence pour jQuery ou quoi que ce soit. Pur vieux bon JavaScript.
la source
la source
Fonction simple pour obtenir un cookie avec un nom de cookie:
la source
Apparemment, MDN n'a jamais entendu parler de la classe de caractères regex de limite de mot
\b
, qui correspond à un contigu\w+
qui est délimité de chaque côté par\W+
:la source
Il me semble que vous pouvez diviser les paires clé-valeur des cookies en un tableau et baser votre recherche sur cela:
Qui s'exécute comme suit:
Violon: http://jsfiddle.net/qFmPc/
Ou peut-être même ce qui suit:
la source
function getCookieData( name ) { var patrn = new RegExp( "(?:^| )" + name + "=(.*?)(?:;|$)" ); if ( match = (document.cookie.match(patrn) )) return match[1]; return false; }
Dans mes projets, j'utilise la fonction suivante pour accéder aux cookies par nom
la source
Si vous avez juste besoin de vérifier s'il existe des cookies, procédez simplement comme suit:
si cookie enregistré = vrai existe, vous en obtiendrez 2, sinon 1.
connecté = vrai - changez ceci en votre nom de cookie = valeur, ou juste un nom
la source
.indexOf() >= 0
place?Il y a déjà de bonnes réponses ici pour obtenir le cookie, mais voici ma propre solution:
utilisation: `
la source
défini par javascript
obtenir par jquery avec le plugin jquery-cookie
la source
référence: https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie
la source
Ma solution est la suivante:
Cette fonction utilise la fonction Underscorejs _.find. Renvoie undefined si le nom du cookie n'existe pas
la source
Je l'ai fait de cette façon. afin que j'obtienne un objet auquel accéder pour séparer les valeurs. Avec cela, vous pouvez passer le cookie au parent et ensuite vous pouvez accéder à vos valeurs par les clés comme
la source
Une approche fonctionnelle pour trouver les cookies existants. Il renvoie un tableau, il prend donc en charge plusieurs occurrences du même nom. Il ne prend pas en charge la correspondance de clé partielle, mais il est trivial de remplacer le === dans le filtre par une expression régulière.
la source
Utilisez simplement la fonction suivante (un code javascript pur)
la source
Obtenez un cookie par nom, passez simplement le nom du cookie à la fonction ci-dessous
la source
La fonction suivante renverra une
key-value
paire de cookies requis, oùkey
est le nom du cookie etvalue
sera la valeur du cookie.la source
Exemple de cookies: exemple JS:
Stockez des tableaux et des objets avec json ou xml
la source