Ich speichere Daten mithilfe des data-
Ansatzes in einem HTML-Tag wie folgt:
<td><"button class='delete' data-imagename='"+results[i].name+"'>Delete"</button></td>
Ich rufe dann die Daten in einem Rückruf wie folgt ab:
$(this).data('imagename');
Das funktioniert gut. Was ich festhalte, ist der Versuch, das Objekt zu speichern, anstatt nur eine der Eigenschaften davon. Ich habe versucht, dies zu tun:
<td><button class='delete' data-image='"+results[i]+"'>Delete</button></td>
Dann habe ich versucht, auf die Eigenschaft name wie folgt zuzugreifen:
var imageObj = $(this).data('image');
console.log('Image name: '+imageObj.name);
Das Protokoll sagt es mir undefined
. Es scheint also, als könnte ich einfache Zeichenfolgen in den data-
Attributen speichern, aber ich kann keine JSON-Objekte speichern ...
Ich habe auch versucht, dieses Kind der Syntax ohne Glück zu verwenden:
<div data-foobar='{"foo":"bar"}'></div>
Haben Sie eine Idee, wie Sie ein tatsächliches Objekt mithilfe des data-
Ansatzes im HTML-Tag speichern können ?
htmlspecialchars(json_encode($e))
(Idee von Nicolas Antwortkommentare ).jsonObject
Muss im ersten Beispiel eine Zeichenfolge festgelegt werden? bearbeiten: falls es jemand anderem hilft, habe ich gerade die Antwort auf diese Frage hier gefunden: stackoverflow.com/a/42864472"You don't need to stringify objects to store them using jQuery.data()"
Eigentlich dein letztes Beispiel:
scheint gut zu funktionieren (siehe http://jsfiddle.net/GlauberRocha/Q6kKU/ ).
Das Schöne ist, dass die Zeichenfolge im Datenattribut automatisch in ein JavaScript-Objekt konvertiert wird. Ich sehe im Gegenteil keinen Nachteil in diesem Ansatz! Ein Attribut reicht aus, um einen ganzen Datensatz zu speichern, der über Objekteigenschaften in JavaScript verwendet werden kann.
(Hinweis: Damit die Datenattribute automatisch den Typ Object anstelle von String erhalten, müssen Sie darauf achten, gültigen JSON zu schreiben, insbesondere um die Schlüsselnamen in doppelte Anführungszeichen zu setzen.)
quelle
$('div').data('foobar').foo
. api.jquery.com/data'
arbeitet nicht für mich, während ichecho json_encode($array)
von PHP. Da es Attributwert durch einfaches Anführungszeichen beendet. Irgendwelche Vorschläge, außer dass man ein einfaches Anführungszeichen manuell aus dem Array entfernt.&quot;
(doppelt maskierte HTML-Entität) so zu codieren, dass es in Ihrer Quelle als & quot; gerendert wird. Aber vielleicht ist das die Art von Dingen, die Sie vermeiden möchten, wenn Sie sagen: "So hat es bei mir funktioniert.
Objekt
einstellen
Codieren Sie das stringifizierte Objekt mit encodeURIComponent () und legen Sie es als Attribut fest:
Bekommen
Um den Wert als Objekt zu erhalten, analysieren Sie den decodierten Attributwert mit decodeURIComponent () :
quelle
Viele Probleme beim Speichern serialisierter Daten können durch Konvertieren der serialisierten Zeichenfolge in base64 gelöst werden .
Ein base64-String kann praktisch überall ohne großen Aufwand akzeptiert werden.
Schauen Sie sich an:
Bei Bedarf nach / von konvertieren.
quelle
window.btoa
JSON.parse
bevor Sie das Ergebnis als Objekt verwenden können.Für mich funktioniert es so, da ich es in einer Vorlage speichern muss ...
quelle
$('body').data('myData', { h: "hello", w: "world" })
$('body').data().myData
'<div data-dataObj=\''+ JSON.stringify(dataObj) +'\'></div>'
. Das sind alles einfache Anführungszeichen, der Anfang und das Ende werden einfach'{"some":"thing"}'
replace()
die Möglichkeit, dass einfache Anführungszeichen in den JSON-Daten erscheinen, was durchaus möglich ist.Der Trick für mich war, doppelte Anführungszeichen um Schlüssel und Werte hinzuzufügen . Wenn Sie eine PHP-Funktion wie verwenden
json_encode
, erhalten Sie eine JSON-codierte Zeichenfolge und eine Idee, wie Sie Ihre ordnungsgemäß codieren können.jQuery('#elm-id').data('datakey')
gibt ein Objekt der Zeichenfolge zurück, wenn die Zeichenfolge ordnungsgemäß als json codiert ist.Gemäß der jQuery-Dokumentation: ( http://api.jquery.com/jquery.parsejson/ )
Das Übergeben einer fehlerhaften JSON-Zeichenfolge führt dazu, dass eine JavaScript-Ausnahme ausgelöst wird. Im Folgenden sind beispielsweise alle ungültigen JSON-Zeichenfolgen aufgeführt:
"{test: 1}"
(test
hat keine doppelten Anführungszeichen)."{'test': 1}"
('test'
verwendet einfache Anführungszeichen anstelle von doppelten Anführungszeichen)."'test'"
('test'
verwendet einfache Anführungszeichen anstelle von doppelten Anführungszeichen).".1"
(Eine Zahl muss mit einer Ziffer beginnen;"0.1"
wäre gültig)."undefined"
(undefined
kann nicht in einer JSON-Zeichenfolge dargestellt werden;null
kann es jedoch sein)."NaN"
(NaN
kann nicht in einer JSON-Zeichenfolge dargestellt werden; die direkte Darstellung von Infinity ist ebenfalls nquelle
Kombinieren Sie die Verwendung von
window.btoa
undwindow.atob
zusammen mitJSON.stringify
undJSON.parse
.- Dies funktioniert für Zeichenfolgen mit einfachen Anführungszeichen
Codierung der Daten:
Daten dekodieren:
Hier ist ein Beispiel dafür, wie die Daten später mit dem Klickereignis erstellt und dekodiert werden.
Erstellen Sie den HTML-Code und codieren Sie die Daten:
Dekodieren Sie die Daten im Klickereignishandler:
quelle
Mit der dokumentierten Syntax jquery .data (obj) können Sie ein Objekt im DOM-Element speichern. Wenn Sie das Element untersuchen, wird das
data-
Attribut nicht angezeigt , da für den Wert des Objekts kein Schlüssel angegeben ist. Daten innerhalb des Objekts können jedoch per Schlüssel mit referenziert.data("foo")
oder das gesamte Objekt mit zurückgegeben werden.data()
.Angenommen, Sie richten eine Schleife ein und
result[i] = { name: "image_name" }
:quelle
Aus irgendeinem Grund funktionierte die akzeptierte Antwort für mich nur, wenn sie einmal auf der Seite verwendet wurde. In meinem Fall habe ich jedoch versucht, Daten für viele Elemente auf der Seite zu speichern, und die Daten gingen irgendwie für alle außer dem ersten Element verloren.
Als Alternative schrieb ich die Daten in den Dom und analysierte sie bei Bedarf wieder. Vielleicht ist es weniger effizient, hat aber für meinen Zweck gut funktioniert, weil ich wirklich Daten prototypisiere und diese nicht für die Produktion schreibe.
So speichern Sie die von mir verwendeten Daten:
Das Zurücklesen der Daten entspricht der akzeptierten Antwort, nämlich:
Auf diese Weise wurden die Daten auch im Dom angezeigt, wenn ich das Element mit dem Chrome-Debugger inspizierte.
quelle
.data()
funktioniert in den meisten Fällen perfekt. Das einzige Mal, dass ich ein Problem hatte, war, wenn die JSON-Zeichenfolge selbst ein einfaches Anführungszeichen hatte. Ich konnte keinen einfachen Weg finden, um daran vorbeizukommen, also griff ich auf diesen Ansatz zurück (verwende Coldfusion als Serversprache):quelle
Für die Aufzeichnung fand ich, dass der folgende Code funktioniert. Sie können das Array aus dem Daten-Tag abrufen, ein neues Element aufschieben und es im richtigen JSON-Format wieder im Daten-Tag speichern. Der gleiche Code kann daher bei Bedarf erneut verwendet werden, um dem Array weitere Elemente hinzuzufügen. Ich habe festgestellt, dass
$('#my-data-div').attr('data-namesarray', names_string);
das Array korrekt gespeichert wird, aber$('#my-data-div').data('namesarray', names_string);
nicht funktioniert.quelle
});
quelle
Dieser Code funktioniert gut für mich.
Daten mit btoa kodieren
Und dann mit atob dekodieren
quelle