Ich habe einen Getter, um den Wert eines Cookies zu ermitteln.
Jetzt habe ich 2 Cookies mit dem Namen shares=
und mit dem Namen obligations=
.
Ich möchte diesen Getter nur machen, um die Werte aus dem Verpflichtungs-Cookie zu erhalten.
Wie mache ich das? Das for
teilt die Daten also in separate Werte auf und fügt sie in ein Array ein.
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
Neuron
quelle
quelle
Antworten:
Ein Ansatz, der das Iterieren über ein Array vermeidet, wäre:
Exemplarische Vorgehensweise
Wenn Sie eine Zeichenfolge nach Token aufteilen, wird entweder ein Array mit einer Zeichenfolge (gleicher Wert) erstellt, falls in einer Zeichenfolge kein Token vorhanden ist, oder ein Array mit zwei Zeichenfolgen, falls Token in einer Zeichenfolge gefunden wird.
Das erste (linke) Element ist eine Zeichenfolge dessen, was vor dem Token war, und das zweite (rechts) ist eine Zeichenfolge dessen, was nach dem Token war.
(HINWEIS: Wenn die Zeichenfolge mit einem Token beginnt, ist das erste Element eine leere Zeichenfolge.)
In Anbetracht dessen, dass Cookies wie folgt gespeichert werden:
Um einen bestimmten Cookie-Wert abzurufen, müssen wir nur eine Zeichenfolge abrufen, die nach "; {name} =" und vor dem nächsten ";" steht. Bevor wir eine Verarbeitung durchführen, stellen wir der Cookie-Zeichenfolge ";" voran, sodass jeder Cookie-Name, einschließlich des ersten, mit ";" und "=" eingeschlossen wird:
Jetzt können wir zuerst durch "; {name} =" teilen. Wenn ein Token in einer Cookie-Zeichenfolge gefunden wird (dh wir haben zwei Elemente), wird das zweite Element eine Zeichenfolge sein, die mit unserem Cookie-Wert beginnt. Dann ziehen wir das aus einem Array (dh Pop) und wiederholen den gleichen Vorgang, aber jetzt mit ";" als Token, aber diesmal ziehen Sie die linke Zeichenfolge (dh Shift) heraus, um den tatsächlichen Token-Wert zu erhalten.
quelle
IE 10+
gibt es auch einen Fehler. Zum Beispiel:"user"
:"Joe"
,"user_name"
:"Doe"
Ich würde es vorziehen, eine einzige Übereinstimmung mit regulären Ausdrücken für das Cookie zu verwenden:
ODER Auch können wir als Funktion verwenden, überprüfen Sie den folgenden Code.
Verbessert dank Scott Jungwirth in den Kommentaren.
quelle
xyz=value
undabcxyz=value
wannname = xyz
.unescape((document.cookie.match(key + '=([^;].+?)(;|$)') || [])[1] || '');
Geänderte Version von Glize / dom / Cookiesnew RegExp('(^| )' + name + '=([^;]+)')
um Probleme zu vermeiden, die von @BrentWashburne verursacht werden. Außerdem habe ich einen jsperf-Test für diesen und die Antwort mit den höchsten Stimmen durchgeführt. Dieser hat einen leichten Vorsprungnew RegExp('(^|;)' + name + '=([^;]+)')
? Dasname
hinter dem Anfang einer Zeile oder eines Semikolons, warum ein Leerzeichen ``?Verwenden Sie ein Skript zum Abrufen von Cookies:
dann nenne es:
Ich habe den obigen Code von der Quirksmode-Cookies-Seite gestohlen. du solltest es lesen .
quelle
Wenn Sie jQuery verwenden, empfehle ich Ihnen, dieses Plugin zu verwenden:
https://github.com/carhartl/jquery-cookie
https://github.com/carhartl/jquery-cookie/blob/master/jquery.cookie.js
So können Sie Cookies wie folgt lesen:
Sie können auch Cookies schreiben:
Cookie löschen:
quelle
Die Methoden in einigen anderen Antworten, die einen regulären Ausdruck verwenden, decken nicht alle Fälle ab, insbesondere:
Die folgende Methode behandelt diese Fälle:
Dies wird zurückgegeben,
null
wenn das Cookie nicht gefunden wird. Es wird eine leere Zeichenfolge zurückgegeben, wenn der Wert des Cookies leer ist.Anmerkungen:
document.cookie
- Wenn dies auf der rechten Seite einer Zuweisung angezeigt wird, handelt es sich um eine Zeichenfolge, die eine durch Semikolons getrennte Liste von Cookies enthält, die wiederumname=value
Paare sind. Nach jedem Semikolon scheint ein einzelnes Leerzeichen zu stehen.String.prototype.match()
- Gibt zurück,null
wenn keine Übereinstimmung gefunden wurde. Gibt ein Array zurück, wenn eine Übereinstimmung gefunden wird, und das Element am Index[1]
ist der Wert der ersten übereinstimmenden Gruppe.Hinweise zu regulären Ausdrücken:
(?:xxxx)
- bildet eine nicht übereinstimmende Gruppe.^
- entspricht dem Anfang der Zeichenfolge.|
- trennt alternative Muster für die Gruppe.;\\s*
- Entspricht einem Semikolon, gefolgt von null oder mehr Leerzeichen.=
- entspricht einem Gleichheitszeichen.(xxxx)
- bildet eine passende Gruppe.[^;]*
- Entspricht null oder mehr Zeichen als einem Semikolon. Dies bedeutet, dass Zeichen bis zu einem Semikolon oder bis zum Ende der Zeichenfolge abgeglichen werden, diese jedoch nicht enthalten.quelle
function getCookie(name) { var match = document.cookie.match(RegExp('(?:^|;\\s*)' + name + '=([^;]*)')); return match ? match[1] : null; }
4 Jahre später, ES6 viel einfachere Version.
Ich habe auch einen Kern erstellt , um es als
Cookie
Objekt zu verwenden. zBCookie.set(name,value)
undCookie.get(name)
Dadurch werden alle Cookies gelesen, anstatt sie zu durchsuchen. Es ist in Ordnung für eine kleine Anzahl von Cookies.
quelle
Ich habe die Funktion, die Jonathan hier bereitgestellt hat, geändert. Wenn Sie einen regulären Ausdruck verwenden, können Sie einen Cookie-Wert mit dem folgenden Namen erhalten:
Wenn eine leere Zeichenfolge zurückgegeben wird, bedeutet dies, dass das Cookie vorhanden ist, aber keinen Wert hat. Wenn es false zurückgibt, ist das Cookie nicht vorhanden. Ich hoffe das hilft.
quelle
var
in Zeile 3 verwendet?matched = ...
Hier ist ein Einzeiler, um ein Cookie mit einem bestimmten Namen zu erhalten, ohne dass eine externe Bibliothek erforderlich ist:
Diese Antwort basiert auf Kirlichs brillanter Lösung . Der einzige Kompromiss dieser Lösung besteht darin, dass Sie eine leere Zeichenfolge erhalten, wenn das Cookie nicht vorhanden ist. In den meisten Fällen sollte dies jedoch kein Deal Breaker sein.
quelle
Ich weiß, dass es eine alte Frage ist, aber ich bin auch auf dieses Problem gestoßen. Nur zur Veranschaulichung: Es gibt eine kleine API auf der Entwickler- Mozilla-Webseite .
Yoy kann jedes Cookie mit Namen nur mit JS erhalten. Der Code ist meiner Meinung nach auch sauberer (mit Ausnahme der langen Schlange, die Sie sicher leicht reparieren können).
Wie in den Kommentaren angegeben, wird bei dieser Methode davon ausgegangen, dass der Schlüssel und der Wert mit encodeURIComponent () codiert wurden. Entfernen Sie decode & encodeURIComponent (), wenn der Schlüssel und der Wert des Cookies nicht codiert wurden.
quelle
encodeURIComponent()
des Cookies beim Setzen des Cookies codiert wurden. Dies ist der Fall, wenn Sie die Companion-Funktion zum Setzen des Cookies verwenden, dies ist jedoch möglicherweise nicht immer der Fall. TestSie können die js-cookie- Bibliothek verwenden, um JavaScript-Cookies abzurufen und zu setzen.
In Ihren HTML-Code aufnehmen:
So erstellen Sie ein Cookie:
So lesen Sie ein Cookie:
quelle
Hier ist eine ziemlich kurze Version
Beachten Sie, dass ich die Vorlagenzeichenfolgen von ES6 verwendet habe, um den Regex-Ausdruck zu erstellen.
quelle
var
, um+
zu verketten usw. -.- 'var
?Verwenden
object.defineProperty
Damit können Sie einfach auf Cookies zugreifen
Von nun an können Sie einfach Folgendes tun:
Dies wird ebenfalls automatisch aktualisiert. Wenn Sie also ein Cookie ändern,
Cookies
ändert sich auch das.quelle
cookies[(cookie.split("=")[0]).replace(/ /g,'')] = ..
. Vielen Dank!!kirlich gab eine gute lösung. Es schlägt jedoch fehl, wenn zwei Cookie-Werte mit ähnlichen Namen vorhanden sind. Hier ist eine einfache Lösung für diese Situation:
quelle
funktioniert immer gut:
Keine Anforderungen für jQuery oder irgendetwas. Reines altes gutes JavaScript.
quelle
quelle
Einfache Funktion zum Abrufen von Cookies mit Cookie-Namen:
quelle
Anscheinend hat MDN noch nie von der Wortgrenzen-Regex-Zeichenklasse gehört
\b
, die zusammenhängend\w+
ist und auf beiden Seiten begrenzt ist mit\W+
:quelle
Mir scheint, Sie könnten die Schlüssel-Wert-Paare für Cookies in ein Array aufteilen und Ihre Suche darauf aufbauen:
Welches läuft das folgende:
Geige: http://jsfiddle.net/qFmPc/
Oder vielleicht sogar folgendes:
quelle
function getCookieData( name ) { var patrn = new RegExp( "(?:^| )" + name + "=(.*?)(?:;|$)" ); if ( match = (document.cookie.match(patrn) )) return match[1]; return false; }
In meinen Projekten verwende ich die folgende Funktion, um namentlich auf Cookies zuzugreifen
quelle
Wenn Sie nur überprüfen müssen, ob ein Cookie vorhanden ist, gehen Sie wie folgt vor:
Wenn Cookie protokolliert = true vorhanden ist, erhalten Sie 2, wenn nicht 1.
logged = true - Ändern Sie dies in Ihren Cookie-Namen = Wert oder nur einen Namen
quelle
.indexOf() >= 0
stattdessen zu verwenden ?Hier gibt es bereits nette Antworten, um den Cookie zu erhalten. Hier ist jedoch meine eigene Lösung:
Verwendung: `
quelle
durch Javascript gesetzt
Holen Sie sich durch JQuery mit dem JQuery-Cookie-Plugin
quelle
Referenz: https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie
quelle
Meine Lösung lautet:
Diese Funktion verwendet die Funktion Underscorejs _.find. Gibt undefiniert zurück, wenn der Cookie-Name nicht vorhanden ist
quelle
Ich habe es so gemacht. Damit bekomme ich ein Objekt, auf das ich zugreifen kann, um die Werte zu trennen. Damit kannst du das Cookie an das übergeordnete Element übergeben und dann kannst du über die Schlüssel wie auf deine Werte zugreifen
quelle
Ein funktionaler Ansatz, um vorhandene Cookies zu finden. Es gibt ein Array zurück, sodass mehrere Vorkommen mit demselben Namen unterstützt werden. Es wird keine teilweise Schlüsselübereinstimmung unterstützt, aber es ist trivial, das === im Filter durch einen regulären Ausdruck zu ersetzen.
quelle
Verwenden Sie einfach die folgende Funktion (ein reiner Javascript-Code)
quelle
Cookie nach Namen abrufen, geben Sie den Namen des Cookies einfach an die unten stehende Funktion weiter
quelle
Die folgende Funktion gibt ein
key-value
Paar des erforderlichen Cookies zurück, wobeikey
der Cookie-Name undvalue
der Wert des Cookies angegeben sind.quelle
Beispiel für Cookies: Beispiel JS:
Speichern Sie Arrays und Objekte mit json oder xml
quelle