Ich spiele mit dem herum attr-daten-* Attribute von HTML5 und dem entsprechenden Javascript Datensatz
Ich mache viel dynamische Formularverarbeitung, also bekomme ich am Ende Sachen wie diese:
<input data-feaux="bar" data-fizz="buzz"/>
Seit HTMLElement.dataset
gibt a zurück DOM string map
der einzige Weg, wie ich herausfinden kann, wie ich es in ein natives Objekt umwandeln kann, ist:
var obj = JSON.parse(JSON.stringify(input_el.dataset))
Gibt es einen besseren Weg, dies zu tun?
Bearbeiten:
Warum sollte ich das tun wollen? Nehmen wir an, ich habe viele, viele dieser Elemente. Ich möchte sie alle durchlaufen und sie zur späteren Verarbeitung in ein Array schieben, dh
elements = document.querySelectorAll("input")
my_data_array = []
for(var i = 0; i < elements.length; i++) {
my_data_array.push(elements[i].dataset)
}
Jetzt habe ich ein Array von Objekten, dh [{feaux: "bar", fizz:"buzz"}....]
mit dem ich arbeiten kann.
Wenn ich die jedoch nicht umwandle DOM string map
in ein Objekt, das Array wird nicht gefüllt (dh der obige Code funktioniert nicht)
Bearbeiten 2
Bei näherer Betrachtung handelt es sich tatsächlich um eine DOM string map
nicht ein object
. Korrektur von Tippfehlern in der ursprünglichen Frage, um dies widerzuspiegeln.
Es ist bereits ein Objekt. Warum willst du, dass es nativ ist?
– Keks Monster
16. Mai 2014 um 19:30 Uhr
@cookiemonster weil
DOM string object
mag es nicht, in ein Array gedrängt zu werden und ich verliere die Schlüssel; Ich habe meine Frage bearbeitet, um ein Beispiel zu geben– Kamelblau
30. Mai 2014 um 19:29 Uhr
In welchem Browser geht das nicht? Funktioniert bei mir im Firefox einwandfrei. …funktioniert auch in Chrome.
– Keks Monster
30. Mai 2014 um 20:04 Uhr
…wie auch immer, wenn man das speichern wollte
dataset
Objekte, Sie könnten genauso gut die Elemente selbst speichern, da Sie die gespeichert habendataset
wird einen Verweis auf das Element beibehalten, da diedataset
verlässt sich darauf, dass das Element funktioniert.– Keks Monster
30. Mai 2014 um 20:06 Uhr
@cookiemonster ja, ich kann das in der Konsole von Chrome zum Laufen bringen, aber aus irgendeinem Grund wird es aus einer Skriptdatei geladen oder mit einem kopflosen Webbrowser ausgeführt, der
DOM string maps
Gehen Sie nicht richtig in das Array. Ich werde weitere Tests durchführen; Dies könnte ein Fehler weiter oben in der Zeile sein: P– Kamelblau
30. Mai 2014 um 20:38 Uhr