Speichern und Abrufen von JavaScript-Arrays in und aus HTML-Datenattributen
Lesezeit: 6 Minuten
Wie kann ein JavaScript-Array in einem benutzerdefinierten HTML-Datenattribut gespeichert werden?
Ich habe jede Variation von JSON-Stringifizierung und Escapezeichen ausprobiert.
Was ist die genaue Methode, um das Array zu speichern und wieder abzurufen?
Ich baue das Array mit [ $("#firstSelectedElement").val(), $("#secondSelectedElement").val() ]. ich hole nach id="storageElement" data-storeIt="stuff" mit $("#storageElement").data('storeit').
Ich kann die Daten anscheinend nie als echtes Array abrufen, sondern nur als Array von Zeichen.
iurii
Sie könnten die HTML-escaped-Zeichen im Element verwenden data Attribut, um ein JSON-ähnliches Array zu haben (codiert sind Anführungszeichen):
Danke für das Update, es hat funktioniert. Aber ich weiß nicht, warum es nicht funktioniert mit data-stuff="['some', 'string', 'here']" (man beachte die '), wäre jede Anleitung willkommen.
– Animesh Singh
20. Mai 2017 um 18:40 Uhr
Tausend Dank (Y), das funktioniert gut: ‘["some", "string", "here"]’
– Ahmed Mostafa
15. August 2017 um 9:17 Uhr
@Animesh Singh: Sie müssen ein gültiges JSON verwenden, einfache Anführungszeichen sind kein gültiges JSON.
– und42
7. August 2018 um 13:00 Uhr
@ nand42 Das Problem mit einfachen Anführungszeichen war das, worauf ich gestoßen bin. Funktioniert wie ein Zauber mit doppelten Anführungszeichen!
– Tschad
5. März 2019 um 15:33 Uhr
Beachten Sie, dass ein Element in den Daten zu einem (int)- oder (string)-Wert führt. Ich habe eine Antwort geschrieben, wie man damit umgeht.
– Henry
13. Februar 2020 um 7:55 Uhr
Grins
Es hängt davon ab, welche Art von Daten Sie im Array speichern. Wenn es nur Zeichenfolgen sind (wie es scheint) und Sie einen Charakter haben, den Sie wissen wird niemals Teil Ihrer Daten sein (wie das Komma in meinem Beispiel unten), dann würde ich die JSON-Serialisierung vergessen und einfach string.split verwenden:
var storedArray = JSON.parse($("#storageElement").data("storeIt"));
Beachten Sie, dass wir in diesem Beispiel Anführungszeichen verwenden mussten (') um die data-storeIt Eigentum. Dies liegt daran, dass die JSON-Syntax erfordert, dass wir die Zeichenfolgen in ihren Daten in Anführungszeichen setzen.
LOL. Ich hasse es, wenn das passiert. Ich denke, eine triviale Antwort, die Sie dazu bringt, “duh!” ist aber besser als gar keine Lösung!
– Grins
25. April 2013 um 20:32 Uhr
@Gracchus Ich habe gerade bemerkt, dass Sie sagten, Sie hätten meinen Vorschlag verwendet, ihn aber nicht als Antwort markiert. Hat es bei dir am Ende nicht geklappt?
– Grins
23. Mai 2014 um 16:44 Uhr
Für Rails-Typen: Die hier erwähnte JSON-Version ist, wie HAML mit Array-Einstellungen umgeht, z. %button{data: {ids: ['a','b','c']} } => <button data-ids='["a","b","c"]'>
– Äquivalent8
13. Februar 2015 um 16:52 Uhr
@Grinn Weißt du warum data-storeIt='["hello","world"]' funktioniert aber data-storeIt="['hello','world']" nicht?
– dchhetri
8. November 2016 um 22:48 Uhr
Es ist bemerkenswert, dass die von @Raff vorgeschlagene Lösung Pfeilfunktionen verwendet, die in IE < Edge nicht unterstützt werden. Das Äquivalent wäre …map(function(s) { return s.trim() })
– Grins
5. Dezember 2016 um 14:37 Uhr
Nichtigkeit
Das HTML5-Datenattribut kann nur Zeichenfolgen speichern. Wenn Sie also ein Array speichern möchten, müssen Sie es serialisieren. JSON wird funktionieren und es sieht so aus, als wären Sie auf dem richtigen Weg. Sie müssen nur verwenden JSON.parse() Sobald Sie die serialisierten Daten abgerufen haben:
var retrieved_string = $("#storageElement").data('storeit');
var retrieved_array = JSON.parse(retrieved_string);
Überprüfung der API-Dokumentation, sollte jQuery versuchen, eine JSON-codierte Zeichenfolge automatisch zu konvertieren, vorausgesetzt, sie ist richtig codiert. Können Sie ein Beispiel für den Wert geben, den Sie speichern?
Beachten Sie auch das HTML5-Datenattribut und jQuery .data() Methoden sind zwei verschiedene Dinge. Sie interagieren, aber jQuery ist leistungsfähiger und kann jeden Datentyp speichern. Sie könnten ein Javascript-Array einfach direkt mit jQuery speichern, ohne es zu serialisieren. Wenn Sie es jedoch im Markup selbst als HTML5-Datenattribut benötigen, sind Sie nur auf Zeichenfolgen beschränkt.
Mateo Tibaquira
Für die Aufzeichnung hat es für mich nicht mit codierten Entitäten funktioniert, aber es scheint, dass das Datenattribut, um als Objekt geparst zu werden muss ein wohlgeformtes JSON-Objekt sein.
Rufen Sie jetzt in Javascript das Array ab, aber wenn es nur einen Wert hat, wird es als Zeichenfolge zurückgegeben. Sie müssen dies also testen und beheben. Wenn es sich um eine Zeichenfolge handelt, müssen wir die zusätzlichen Anführungszeichen entfernen. $(this) muss auf das Objekt zeigen.
var arr_diensten = $(this).data("arr_diensten");
if (typeof arr_diensten == "string") arr_diensten = [arr_diensten.slice(1, -1)];
console.log(arr_diensten);
14470300cookie-checkSpeichern und Abrufen von JavaScript-Arrays in und aus HTML-Datenattributenyes