хранить и извлекать массивы JavaScript в HTML5 атрибуты данных
как может javascript Array
храниться в HTML5
5 ответов
оказалось, что можно использовать HTML-мнемоники символов в элементе data
атрибут, чтобы иметь JSON-подобный массив (закодированы кавычки):
<div id="demo" data-stuff='["some", "string", "here"]'></div>
и затем в javascript получите его без какой-либо дополнительной магии:
var ar = $('#demo').data('stuff');
проверить это скрипка выход.
редактировать (2017)
Вам не нужно использовать HTML-экранированные символы в .
<div id="demo" data-stuff='["some", "string", "here"]'></div>
проверьте это новое скрипка выход.
это зависит от того, какие данные вы храните в массиве. Если это просто строки (как кажется) и у вас есть персонаж которого вы знаю никогда не будет частью ваших данных (например, запятая в моем примере ниже), тогда я забуду о сериализации JSON и просто использую строку.сплит:
<div id="storageElement" data-storeIt="stuff,more stuff"></div>
затем при получении:
var storedArray = $("#storageElement").data("storeIt").split(",");
он будет работать немного лучше, чем с помощью JSON. Он использует меньше символов и является менее "дорогим", чем JSON.parse
.
но, если необходимо, ваша реализация JSON будет выглядеть примерно так:
<div id="storageElement" data-storeIt='["hello","world"]'></div>
и получить:
var storedArray = JSON.parse($("#storageElement").data("storeIt"));
обратите внимание, что в этом примере мы должны были использовать полу-кавычки ('
) в районе data-storeIt
собственность. Это связано с тем, что синтаксис JSON требует, чтобы мы использовали кавычки вокруг строк в его данных.
атрибут данных HTML5 может хранить только строки, поэтому, если вы хотите сохранить массив, вам нужно будет сериализовать его. JSON будет работать, и похоже, что вы на правильном пути. Вам просто нужно использовать JSON.parse()
после извлечения сериализованных данных:
var retrieved_string = $("#storageElement").data('storeit');
var retrieved_array = JSON.parse(retrieved_string);
обзор документация api, jQuery должен попытаться автоматически преобразовать строку в кодировке JSON при условии, что она правильно закодирована. Можете ли вы привести пример ценности, которой вы являетесь хранение?
также обратите внимание, что атрибут данных HTML5 и jQuery .data()
методы-это две разные вещи. Они взаимодействуют, но jQuery более мощный и может хранить любой тип данных. Вы можете просто сохранить массив javascript непосредственно с помощью jQuery без его сериализации. Но если вам нужно иметь его в самой разметке как атрибут данных HTML5, то вы ограничены только строками.
для записи он не работал с закодированными сущностями для меня, но кажется, что для того, чтобы быть проанализированным как объект, атрибут data должен быть хорошо сформированный объект JSON.
поэтому я смог использовать объект с:
data-myarray="{"key": "value"}"
или может просто использовать одинарные кавычки:
data-myobject='{"key1": "value1", "key2": value2}'
время, чтобы повеселиться! : D
вы можете хранить любой объект в узле так:
$('#storageElement').data('my-array', ['a', 'b', 'c']);
var myArray = $('#storageElement').data('my-array');