Eu tenho um getter para obter o valor de um cookie.
Agora eu tenho 2 cookies pelo nome shares=
e pelo nomeobligations=
.
Eu quero fazer esse getter apenas para obter os valores do cookie de obrigações.
Como eu faço isso? Então, os for
dados são divididos em valores separados e os são colocados em uma 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
Neuron
fonte
fonte
Respostas:
Uma abordagem, que evita a iteração sobre uma matriz, seria:
Passo a passo
A divisão de uma sequência por token produzirá uma matriz com uma sequência (o mesmo valor), caso o token não exista em uma sequência, ou uma matriz com duas sequências, caso o token seja encontrado em uma sequência.
O primeiro elemento (à esquerda) é uma sequência do que estava antes do token, e o segundo (à direita) é a sequência do que estava após o token.
(OBSERVAÇÃO: caso a cadeia inicie com um token, o primeiro elemento é uma cadeia vazia)
Considerando que os cookies são armazenados da seguinte maneira:
para recuperar um valor específico do cookie, só precisamos obter uma string que é depois de "; {name} =" e antes da próxima ";". Antes de realizar qualquer processamento, anexamos a sequência de cookies com ";", para que todos os nomes de cookies, incluindo o primeiro, sejam colocados entre ";" e "=":
Agora, podemos primeiro dividir por "; {name} =", e se o token for encontrado em uma string de cookie (ou seja, temos dois elementos), terminaremos com o segundo elemento sendo uma string que começa com o valor do cookie. Em seguida, extraímos isso de uma matriz (por exemplo, pop) e repetimos o mesmo processo, mas agora com ";" como um token, mas desta vez puxando a corda esquerda (ou seja, shift) para obter o valor real do token.
fonte
IE 10+
também ocorre um erro. Por exemplo:"user"
:"Joe"
,"user_name"
:"Doe"
Eu preferiria usar uma única expressão regular correspondente no cookie:
OU Também podemos usar como uma função, verifique o código abaixo.
Agradecimentos aprimorados a Scott Jungwirth nos comentários.
fonte
xyz=value
eabcxyz=value
quandoname = xyz
.unescape((document.cookie.match(key + '=([^;].+?)(;|$)') || [])[1] || '');
Versão modificada do Glize / dom / Cookiesnew RegExp('(^| )' + name + '=([^;]+)')
evitar problemas levantados por @BrentWashburne. Também fiz um teste jsperf para isso e a resposta com os votos mais altos, este sai um pouco por cima, mas é definitivamente menos código e mais fácil de seguir: jsperf.com/simple-get-cookie-by-namenew RegExp('(^|;)' + name + '=([^;]+)')
? Porname
trás do início de uma linha ou ponto e vírgula, por que um espaço ``?use um script para obter cookies:
então chame-o:
Eu roubei o código acima da página de cookies quirksmode. você deveria ler .
fonte
Se você usa jQuery, recomendo que você use este plugin:
https://github.com/carhartl/jquery-cookie
https://github.com/carhartl/jquery-cookie/blob/master/jquery.cookie.js
Então você pode ler os cookies assim:
Além disso, você pode escrever um cookie:
Excluir cookie:
fonte
Os métodos em algumas das outras respostas que usam uma expressão regular não cobrem todos os casos, principalmente:
O método a seguir lida com esses casos:
Isso retornará
null
se o cookie não for encontrado. Ele retornará uma string vazia se o valor do cookie estiver vazio.Notas:
document.cookie
- Quando isso aparece no lado direito de uma atribuição, representa uma sequência que contém uma lista de cookies separados por ponto e vírgula, que por sua vez sãoname=value
pares. Parece haver um espaço único após cada ponto e vírgula.String.prototype.match()
- Retornanull
quando nenhuma correspondência é encontrada. Retorna uma matriz quando uma correspondência é encontrada, e o elemento no índice[1]
é o valor do primeiro grupo correspondente.Notas sobre expressões regulares:
(?:xxxx)
- forma um grupo não correspondente.^
- corresponde ao início da string.|
- separa padrões alternativos para o grupo.;\\s*
- corresponde a um ponto-e-vírgula seguido por zero ou mais caracteres de espaço em branco.=
- corresponde a um sinal de igual.(xxxx)
- forma um grupo correspondente.[^;]*
- corresponde a zero ou mais caracteres que não sejam ponto-e-vírgula. Isso significa que ele corresponderá caracteres até, mas não incluindo, um ponto-e-vírgula ou o final da sequência.fonte
function getCookie(name) { var match = document.cookie.match(RegExp('(?:^|;\\s*)' + name + '=([^;]*)')); return match ? match[1] : null; }
4 anos depois, versão ES6 muito mais simples.
Eu também criei uma essência para usá-la como um
Cookie
objeto. por exemplo,Cookie.set(name,value)
eCookie.get(name)
Isso leu todos os cookies em vez de varrer. Tudo bem para um pequeno número de cookies.
fonte
Eu modifiquei a função que Jonathan forneceu aqui, usando a expressão regular, você pode obter um valor de cookie por seu nome assim:
Se retornar string vazia, significa que o cookie existe, mas não tem valor; se retornar false, o cookie não existe. Eu espero que isso ajude.
fonte
var
na linha 3?matched = ...
Aqui está uma lista para obter um cookie com um nome específico, sem a necessidade de qualquer lib externa:
Esta resposta é baseada na solução brilhante de Kirlich . O único compromisso dessa solução é que você receberá uma string vazia quando o cookie não existir. Na maioria dos casos, isso não deve ser um desagrado.
fonte
Eu sei que é uma pergunta antiga, mas me deparei com esse problema também. Apenas para constar, existe uma pequena API na página da web para desenvolvedores do mozilla .
Você pode obter qualquer cookie pelo nome usando apenas JS. O código também é IMHO mais limpo (exceto para a linha longa, que eu tenho certeza que você pode consertar facilmente).
Conforme declarado nos comentários, saiba que esse método pressupõe que a chave e o valor foram codificados usando encodeURIComponent (). Remova decode & encodeURIComponent () se a chave e o valor do cookie não foram codificados.
fonte
encodeURIComponent()
quando o cookie foi definido, o que será verdadeiro se você usar a função complementar para definir o cookie, mas nem sempre será esse o caso. testeVocê pode usar o js-cookie biblioteca para obter e definir cookies JavaScript.
Inclua no seu HTML:
Para criar um cookie:
Para ler um cookie:
fonte
Aqui está uma versão bastante curta
Observe que fiz uso das seqüências de caracteres do modelo do ES6 para compor a expressão regex.
fonte
var
,+
para concatenar, etc. -.-'var
?Usar
object.defineProperty
Com isso, você pode acessar facilmente os cookies
A partir de agora você pode apenas fazer:
Isso também será atualizado automaticamente; portanto, se você alterar um cookie, o
Cookies
mesmo também será alterado.fonte
cookies[(cookie.split("=")[0]).replace(/ /g,'')] = ..
. Obrigado!!Kirlich deu uma boa solução. No entanto, ele falha quando há dois valores de cookie com nomes semelhantes. Aqui está uma correção simples para esta situação:
fonte
sempre funciona bem:
Não há requisitos para jQuery ou qualquer coisa. JavaScript puro e antigo.
fonte
fonte
Função simples para Obter cookie com o nome do cookie:
fonte
Aparentemente, o MDN nunca ouviu falar da classe de caracteres regex de limite de palavras
\b
, que corresponde ao contíguo\w+
que é delimitado de ambos os lados por\W+
:fonte
Parece-me que você pode dividir os pares de valor-chave do cookie em uma matriz e basear sua pesquisa nisso:
Que executa o seguinte:
Violino: http://jsfiddle.net/qFmPc/
Ou possivelmente até o seguinte:
fonte
function getCookieData( name ) { var patrn = new RegExp( "(?:^| )" + name + "=(.*?)(?:;|$)" ); if ( match = (document.cookie.match(patrn) )) return match[1]; return false; }
Nos meus projetos, uso a seguinte função para acessar os cookies por nome
fonte
Se você só precisa verificar se existe algum cookie, faça o seguinte:
se o cookie logado = true existir, você receberá 2, se não 1.
logado = verdadeiro - altere para o nome do cookie = valor ou apenas um nome
fonte
.indexOf() >= 0
?Já existem respostas legais aqui para obter o cookie, mas aqui está a minha própria solução:
uso: `
fonte
definido por javascript
obtenha pelo jquery com o plugin jquery-cookie
fonte
referência: https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie
fonte
Minha solução é esta:
Esta função usa a função Underscorejs _.find. Retorna indefinido se o nome do cookie não existir
fonte
Eu fiz dessa maneira. Para que eu receba um objeto para acessar para separar os valores. Com isso, você pode passar o cookie para o pai e, em seguida, você pode acessar seus valores pelas chaves como
fonte
Uma abordagem funcional para encontrar cookies existentes. Ele retorna uma matriz e suporta várias ocorrências com o mesmo nome. Ele não suporta correspondência parcial de chave, mas é trivial substituir o === no filtro por um regex.
fonte
Basta usar a seguinte função (um código javascript puro)
fonte
Obter cookie pelo nome, basta passar o nome do cookie para a função abaixo
fonte
A função a seguir retornará um
key-value
par do cookie necessário, ondekey
é o nome do cookie evalue
será o valor do cookie.fonte
Exemplo de cookies: exemplo JS:
Armazene matrizes e objetos com json ou xml
fonte