Tengo un captador para obtener el valor de una cookie.
Ahora tengo 2 cookies por el nombre shares=
y por el nombre obligations=
.
Quiero hacer que este captador solo obtenga los valores de la cookie de obligaciones.
¿Cómo hago esto? Entonces, for
divide los datos en valores separados y los coloca en una matriz.
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
Neurona
fuente
fuente
Respuestas:
Un enfoque, que evita iterar sobre una matriz, sería:
Tutorial
Dividir una cadena por un token producirá una matriz con una cadena (mismo valor), en caso de que el token no exista en una cadena, o una matriz con dos cadenas, en caso de que el token se encuentre en una cadena.
El primer elemento (izquierda) es la cadena de lo que estaba antes del token, y el segundo (derecha) es la cadena de lo que estaba después del token.
(NOTA: en caso de que la cadena comience con un token, el primer elemento es una cadena vacía)
Teniendo en cuenta que las cookies se almacenan de la siguiente manera:
para recuperar un valor de cookie específico, solo necesitamos obtener una cadena que esté después de "; {name} =" y antes del siguiente ";". Antes de realizar cualquier procesamiento, anteponemos la cadena de cookies con ";", de modo que cada nombre de cookie, incluido el primero, esté encerrado con ";" y "=":
Ahora, primero podemos dividir por "; {name} =", y si el token se encuentra en una cadena de cookies (es decir, tenemos dos elementos), terminaremos con el segundo elemento como una cadena que comienza con nuestro valor de cookie. Luego sacamos eso de una matriz (es decir, pop) y repetimos el mismo proceso, pero ahora con ";" como un token, pero esta vez tirando de la cadena izquierda (es decir, shift) para obtener el valor real del token.
fuente
IE 10+
también da un error. Por ejemplo:"user"
:"Joe"
,"user_name"
:"Doe"
Preferiría usar una sola coincidencia de expresión regular en la cookie:
O bien, también podemos usarlo como una función, verifique el código a continuación.
Mejorado gracias a Scott Jungwirth en los comentarios.
fuente
xyz=value
yabcxyz=value
cuándoname = xyz
.unescape((document.cookie.match(key + '=([^;].+?)(;|$)') || [])[1] || '');
Versión modificada de Glize / dom / Cookiesnew RegExp('(^| )' + name + '=([^;]+)')
evitar problemas planteados por @BrentWashburne. También hice una prueba jsperf para esto y la respuesta con los votos más altos, esta aparece un poco por encima, pero definitivamente es menos código y más fácil de seguir: jsperf.com/simple-get-cookie-by-namenew RegExp('(^|;)' + name + '=([^;]+)')
? Elname
detrás del inicio de una línea o punto y coma, ¿por qué un espacio ``?use un script de obtención de cookies:
entonces llámalo:
Robé el código anterior de la página de cookies quirksmode. deberías leerlo .
fuente
Si usa jQuery, le recomiendo que use este complemento:
https://github.com/carhartl/jquery-cookie
https://github.com/carhartl/jquery-cookie/blob/master/jquery.cookie.js
Entonces puedes leer una cookie como esta:
También puedes escribir cookie:
Eliminar cookie:
fuente
Los métodos en algunas de las otras respuestas que usan una expresión regular no cubren todos los casos, particularmente:
El siguiente método maneja estos casos:
Esto regresará
null
si no se encuentra la cookie. Devolverá una cadena vacía si el valor de la cookie está vacío.Notas:
document.cookie
- Cuando esto aparece en el lado derecho de una tarea, representa una cadena que contiene una lista de cookies separadas por punto y coma, que a su vez sonname=value
pares. Parece que hay un solo espacio después de cada punto y coma.String.prototype.match()
- Regresanull
cuando no se encuentra ninguna coincidencia. Devuelve una matriz cuando se encuentra una coincidencia, y el elemento en el índice[1]
es el valor del primer grupo coincidente.Notas de expresiones regulares:
(?:xxxx)
- forma un grupo no coincidente.^
- coincide con el inicio de la cadena.|
- separa patrones alternativos para el grupo.;\\s*
- coincide con un punto y coma seguido de cero o más caracteres de espacio en blanco.=
- coincide con un signo igual.(xxxx)
- forma un grupo coincidente.[^;]*
- coincide con cero o más caracteres que no sean punto y coma. Esto significa que coincidirá con los caracteres hasta, pero sin incluir, un punto y coma o al final de la cadena.fuente
function getCookie(name) { var match = document.cookie.match(RegExp('(?:^|;\\s*)' + name + '=([^;]*)')); return match ? match[1] : null; }
4 años después, ES6 versión más simple.
También he creado una esencia para usarlo como un
Cookie
objeto. por ejemplo,Cookie.set(name,value)
yCookie.get(name)
Esto lee todas las cookies en lugar de escanear. Está bien para una pequeña cantidad de cookies.
fuente
He modificado la función que Jonathan proporcionó aquí, mediante el uso de expresiones regulares puede obtener un valor de cookie por su nombre como este:
Si devuelve una cadena vacía, significa que la cookie existe pero no tiene valor; si devuelve false, la cookie no existe. Espero que esto ayude.
fuente
var
en la línea 3?matched = ...
Aquí hay una guía para obtener una cookie con un nombre específico sin la necesidad de ninguna lib externa:
Esta respuesta se basa en la brillante solución de kirlich . El único compromiso de esta solución es que obtendrá una cadena vacía cuando la cookie no exista. Sin embargo, en la mayoría de los casos esto no debería ser un factor decisivo.
fuente
Sé que es una vieja pregunta, pero también me encontré con este problema. Solo para que conste, hay una pequeña API en la página web de desarrolladores de Mozilla .
Yoy puede obtener cualquier cookie por nombre usando solo JS. El código también es más limpio en mi humilde opinión (excepto por la larga línea, que estoy seguro de que puede solucionar fácilmente).
Como se indicó en los comentarios, tenga en cuenta que este método supone que la clave y el valor se codificaron usando encodeURIComponent (). Elimine decode & encodeURIComponent () si la clave y el valor de la cookie no estaban codificados.
fuente
encodeURIComponent()
cuando se configuró la cookie, lo que será cierto si usa la función complementaria para configurar la cookie, pero no siempre es el caso. pruebaPuede usar la biblioteca js-cookie para obtener y configurar cookies de JavaScript.
Incluir en tu HTML:
Para crear una cookie:
Para leer una cookie:
fuente
Aquí hay una versión bastante corta
Tenga en cuenta que hice uso de las cadenas de plantilla de ES6 para componer la expresión regex.
fuente
var
,+
para concatenar, etc. -.- 'var
?Utilizar
object.defineProperty
Con esto, puede acceder fácilmente a las cookies.
A partir de ahora solo puedes hacer:
Esto también se actualizará automáticamente, por lo que si cambia una cookie,
Cookies
también cambiará.fuente
cookies[(cookie.split("=")[0]).replace(/ /g,'')] = ..
. ¡¡Gracias!!Kirlich dio una buena solución. Sin embargo, falla cuando hay dos valores de cookies con nombres similares, aquí hay una solución simple para esta situación:
fuente
siempre funciona bien:
No hay requisitos para jQuery ni nada. Puro viejo buen JavaScript.
fuente
fuente
Función simple para Obtener cookie con nombre de cookie:
fuente
Aparentemente, MDN nunca ha oído hablar de la clase de caracteres regex de límite de palabra
\b
, que coincide con contigua\w+
que está delimitada a ambos lados con\W+
:fuente
Me parece que podría dividir los pares clave-valor de cookies en una matriz y basar su búsqueda en eso:
Que ejecuta lo siguiente:
Violín: http://jsfiddle.net/qFmPc/
O posiblemente incluso lo siguiente:
fuente
function getCookieData( name ) { var patrn = new RegExp( "(?:^| )" + name + "=(.*?)(?:;|$)" ); if ( match = (document.cookie.match(patrn) )) return match[1]; return false; }
En mis proyectos utilizo la siguiente función para acceder a las cookies por nombre
fuente
Si solo necesita verificar si existe alguna cookie, simplemente haga esto:
si la cookie registrada = true existe, obtendrá 2, si no 1.
registrado = verdadero: cámbielo a usted nombre de cookie = valor, o simplemente un nombre
fuente
.indexOf() >= 0
?Ya hay buenas respuestas aquí para obtener la cookie. Sin embargo, esta es mi propia solución:
uso: `
fuente
establecido por javascript
pasa por jquery con el complemento jquery-cookie
fuente
referencia: https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie
fuente
Mi solución es esta:
Esta función utiliza la función Underscorejs _.find. Devuelve indefinido si el nombre de la cookie no existe
fuente
Lo he hecho de esta manera. para que pueda acceder a un objeto para separar los valores. Con esto, puede pasar la cookie al padre y luego puede acceder a sus valores mediante las teclas como
fuente
Un enfoque funcional para encontrar cookies existentes. Devuelve una matriz, por lo que admite múltiples ocurrencias del mismo nombre. No admite la coincidencia parcial de teclas, pero es trivial reemplazar el === en el filtro con una expresión regular.
fuente
Simplemente use la siguiente función (un código javascript puro)
fuente
Obtenga la cookie por nombre, simplemente pase el nombre de la cookie a la siguiente función
fuente
La siguiente función devolverá un
key-value
par de la cookie requerida, dondekey
está el nombre de la cookie yvalue
será el valor de la cookie.fuente
Ejemplo de cookies: ejemplo JS:
Almacene matrices y objetos con json o xml
fuente