У меня есть получатель, чтобы получить значение из куки.
Теперь у меня есть 2 куки по имени shares=
и по имени obligations=
.
Я хочу сделать этот геттер только для того, чтобы получить значения из файла cookie обязательств.
Как мне это сделать? Таким образом, for
данные разбиваются на отдельные значения и помещаются в массив.
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
нейрон
источник
источник
Ответы:
Один подход, который избегает итерации по массиву, был бы:
Прохождение
Разделение строки по токену приведет либо к массиву с одной строкой (с одинаковым значением), если токен отсутствует в строке, либо к массиву с двумя строками, если токен найден в строке.
Первый (левый) элемент - это строка того, что было до токена, а второй (справа) - это строка того, что было после токена.
(ПРИМЕЧАНИЕ: если строка начинается с токена, первый элемент является пустой строкой)
Учитывая, что куки хранятся следующим образом:
чтобы получить определенное значение cookie, нам просто нужно получить строку после "; {name} =" и до следующего ";". Прежде чем приступить к какой-либо обработке, мы добавляем строку cookie с «;», чтобы каждое имя файла cookie, включая первое, было заключено в «;» и «=»:
Теперь мы можем сначала разделить на «; {name} =», и если токен найден в строке cookie (т. Е. У нас есть два элемента), мы получим второй элемент, представляющий собой строку, начинающуюся с нашего значения cookie. Затем мы извлекаем это из массива (то есть pop) и повторяем тот же процесс, но теперь с «;» в качестве токена, но на этот раз вытащив левую строку (т. е. сдвиг), чтобы получить фактическое значение токена.
источник
IE 10+
также выдает ошибку. Например:"user"
:"Joe"
,"user_name"
:"Doe"
Я бы предпочел использовать одно совпадение с регулярным выражением в куки:
ИЛИ Также мы можем использовать в качестве функции, проверьте код ниже.
Улучшено благодаря Скотту Юнгвирту в комментариях.
источник
xyz=value
иabcxyz=value
когдаname = xyz
.unescape((document.cookie.match(key + '=([^;].+?)(;|$)') || [])[1] || '');
Модифицированная версия Glize / DOM / Cookiesnew RegExp('(^| )' + name + '=([^;]+)')
избежать проблемы, возникшей у @BrentWashburne. Кроме того, я сделал тест jsperf для этого и получил ответ с наибольшим количеством голосов, этот немного выше, но он определенно меньше кода и его легче отслеживать: jsperf.com/simple-get-cookie-by-namenew RegExp('(^|;)' + name + '=([^;]+)')
? Заname
началом строки или точки с запятой, почему пробел ``?используйте скрипт получения куки:
тогда назовите это:
Я украл код выше со страницы куки quirksmode. Вы должны прочитать это .
источник
Если вы используете jQuery, я рекомендую вам использовать этот плагин:
https://github.com/carhartl/jquery-cookie
https://github.com/carhartl/jquery-cookie/blob/master/jquery.cookie.js
Таким образом, вы можете прочитать cookie следующим образом:
Также вы можете написать cookie:
Удалить куки:
источник
Методы в некоторых других ответах, которые используют регулярное выражение, не охватывают все случаи, в частности:
Следующий метод обрабатывает эти случаи:
Это вернется,
null
если cookie не найден. Он вернет пустую строку, если значение cookie пустое.Ноты:
document.cookie
- Когда это появляется в правой части назначения, оно представляет строку, содержащую список файлов cookie, разделенных точкой с запятой, которые, в свою очередь, являютсяname=value
парами. Кажется, что после каждой точки с запятой есть один пробел.String.prototype.match()
- Возвращает,null
когда совпадений не найдено. Возвращает массив, когда найдено совпадение, а элемент в index[1]
является значением первой совпадающей группы.Примечания регулярного выражения:
(?:xxxx)
- формирует несоответствующую группу.^
- соответствует началу строки.|
- отделяет альтернативные шаблоны для группы.;\\s*
- соответствует одной точке с запятой, за которой следует ноль или более пробельных символов.=
- соответствует одному знаку равенства.(xxxx)
- формирует соответствующую группу.[^;]*
- соответствует нулю или более символов, кроме точки с запятой. Это означает, что он будет соответствовать символам до, но не включая точку с запятой или до конца строки.источник
function getCookie(name) { var match = document.cookie.match(RegExp('(?:^|;\\s*)' + name + '=([^;]*)')); return match ? match[1] : null; }
Спустя 4 года ES6 значительно упростила версию.
Я также создал суть, чтобы использовать его как
Cookie
объект. например,Cookie.set(name,value)
иCookie.get(name)
Это читает все куки вместо сканирования. Это нормально для небольшого количества печенья.
источник
Я изменил функцию, представленную здесь Джонатаном, используя регулярное выражение, вы можете получить значение cookie по его имени, например так:
Если он возвращает пустую строку, это означает, что cookie существует, но не имеет значения, если он возвращает false, то cookie не существует. Надеюсь, это поможет.
источник
var
в строке 3?matched = ...
Вот один из способов получить cookie с определенным именем без необходимости использования каких-либо внешних библиотек:
Этот ответ основан на блестящем решении Кирлиха . Единственный компромисс этого решения заключается в том, что вы получите пустую строку, когда cookie не существует. Однако в большинстве случаев это не должно нарушать договоренности.
источник
Я знаю, что это старый вопрос, но я тоже сталкивался с этой проблемой. Просто для записи, есть небольшой API в веб-странице разработчиков Mozilla .
Yoy может получить любой файл cookie по имени, используя только JS. Код также чище ИМХО (за исключением длинной строки, которую, я уверен, вы можете легко исправить).
Как указано в комментариях, имейте в виду, что этот метод предполагает, что ключ и значение были закодированы с использованием encodeURIComponent (). Удалите decode & encodeURIComponent (), если ключ и значение файла cookie не были закодированы.
источник
encodeURIComponent()
когда файл cookie был установлен, что будет истинно, если вы используете функцию-компаньон для установки файла cookie, но это может не всегда иметь место. тестВы можете использовать библиотеку js-cookie для получения и установки файлов cookie JavaScript.
Включить в ваш HTML:
Чтобы создать Cookie:
Чтобы прочитать Cookie:
источник
Вот довольно короткая версия
Обратите внимание, что я использовал строки шаблона ES6 для составления выражения регулярного выражения.
источник
var
,+
чтобы объединить и т. Д. -.- 'var
?использование
object.defineProperty
С этим вы можете легко получить доступ к куки
Отныне вы можете просто сделать:
Это также автоматически обновится, поэтому, если вы измените куки, то
Cookies
тоже изменится.источник
cookies[(cookie.split("=")[0]).replace(/ /g,'')] = ..
. Спасибо!!Кирлих дал хорошее решение. Тем не менее, это не удается, когда есть два значения cookie с похожими именами, вот простое исправление для этой ситуации:
источник
всегда хорошо работает
Нет требований для jQuery или чего-либо еще. Чистый старый добрый JavaScript.
источник
источник
Простая функция для получения куки с именем куки:
источник
По-видимому, MDN никогда не слышал о классе символов регулярных выражений
\b
, который соответствует смежному\w+
, ограниченному с обеих сторон\W+
:источник
Мне кажется, вы могли бы разделить пары ключ-значение cookie на массив и основывать свой поиск на этом:
Который запускает следующее:
Скрипка: http://jsfiddle.net/qFmPc/
Или, возможно, даже следующее:
источник
function getCookieData( name ) { var patrn = new RegExp( "(?:^| )" + name + "=(.*?)(?:;|$)" ); if ( match = (document.cookie.match(patrn) )) return match[1]; return false; }
В своих проектах я использую следующую функцию для доступа к куки по имени
источник
Если вам просто нужно проверить, существуют ли какие-либо куки, просто сделайте это:
если cookie logged = true существует, вы получите 2, если не 1.
logged = true - измените это на cookie имя = значение или просто имя
источник
.indexOf() >= 0
вместоЗдесь уже есть хорошие ответы для получения куки, однако вот мое собственное решение:
использование: `
источник
устанавливается javascript
получить с помощью jquery с плагином jquery-cookie
источник
ссылка: https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie
источник
Мое решение таково:
Эта функция использует функцию Underscorejs _.find. Возвращает неопределенное значение, если имя файла cookie не существует
источник
Я сделал это таким образом. так что я получаю объект для доступа к отдельным значениям. С этим вы можете передать cookie родительскому элементу, а затем вы можете получить доступ к своим значениям с помощью ключей, таких как
источник
Функциональный подход к поиску существующих куки. Он возвращает массив, поэтому он поддерживает несколько вхождений с одним и тем же именем. Он не поддерживает частичное совпадение ключей, но тривиально заменить === в фильтре на регулярное выражение.
источник
Просто используйте следующую функцию (чистый код JavaScript)
источник
Получить куки по имени, просто передайте имя куки в функцию ниже
источник
Следующая функция вернет
key-value
пару необходимых файлов cookie, гдеkey
будет указано имя файла cookie иvalue
значение файла cookie.источник
Пример файлов cookie: пример JS:
Храните массивы и объекты с помощью json или xml
источник