Javascript Array
をHTML5 data
属性に格納するにはどうすればよいですか?
_JSON.stringify
_ cationのすべてのバリエーションを試し、文字をエスケープしました。
配列を保存して再度取得する正確な方法は何ですか?
注
[ $("#firstSelectedElement").val(), $("#secondSelectedElement").val() ]
で配列を作成します。 $("#storageElement").data('storeit')
で_id="storageElement" data-storeIt="stuff"
_を取得します。
データを真のArray
として取得することはできません。Array
の文字のみです。
要素のdata
属性でhtmlエスケープ文字を使用して、jsonのような配列を作成できることがわかりました(エンコードは引用符です)。
<div id="demo" data-stuff='["some", "string", "here"]'></div>
そして、javascriptで追加の魔法なしでそれを取得します:
var ar = $('#demo').data('stuff');
これを確認してください fiddle out。
編集済み(2017)data
属性でhtmlエスケープ文字を使用する必要はありません。
<div id="demo" data-stuff='["some", "string", "here"]'></div>
この新しい fiddle outを確認してください。
配列に保存しているデータの種類によって異なります。それが単なる文字列であり、あなたがknowが決してデータの一部にならない文字を持っている場合(以下の私の例のコンマのように)、JSONシリアル化を忘れますそして、単にstring.splitを使用します:
<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 documentation を確認すると、jQueryは、適切にエンコードされているJSONエンコード文字列を自動的に変換しようとする必要があります。格納している値の例を教えてください。
また、HTML5データ属性とjQuery .data()
メソッドは2つの異なるものであることに注意してください。これらは相互作用しますが、jQueryはより強力で、あらゆるデータ型を格納できます。直列化することなく、jQueryを使用して直接JavaScript配列を保存できます。ただし、マークアップ自体にHTML5データ属性として含める必要がある場合は、文字列のみに制限されます。
レコードについては、エンコードされたエンティティでは機能しませんでしたが、オブジェクトとして解析するためには、データ属性整形式の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');