Problem beim Ändern von .data

Jan-Frederik Stieler

Monsterator
Moderator
Ich steh grad etwas aufm Schlauch. Ich möchte eigntlich nur das data-attribut ändern.
Code:
$('#collapseLanguage').on('shown.bs.collapse', function () {
        $('.collapseIcon>i').data('glyph', 'plus');
});

$('#collapseLanguage').on('hidden.bs.collapse', function () {
       $('.collapseIcon>i').data('glyph', 'minus');
});
Wenn ich das als Attribut ändere funktioneirt es
Code:
$('#collapseLanguage').on('shown.bs.collapse', function () {
        $('.collapseIcon>i').attr('data-glyph', 'plus');
});

$('#collapseLanguage').on('hidden.bs.collapse', function () {
       $('.collapseIcon>i').attr('data-glyph', 'minus');
});
Was mach ich da mit .data falsch?

Grüße
 
hehe genau die gleiche Frage hatte ich auch mal Jan ;)
Du machst nichts falsch!
Aber mit dem .data() änderst du nur den, nennen wir ihn, data-value den jQuery benutzt, am html attribute wird nichts geändert, es wird von jQuery nur benutzt um seien data-value zu initialisieren.
Und das heisst auch, dass wenn du das attribute im Nachhinein änderst der data-value nicht mehr geändert wird.
http://jsfiddle.net/v4vef5yj/1/
 
Hallo,
@merzi86: Es handelt sich um jQuery.
@jeipack: Okay, also ist der data-value nur ein initialisierungswert. Und wie kann ich dann den data-value nachträglich ändern?
Also deine Schriftliche Erklärung hat mir grad mehr gebracht als dein Code-Beispiel :). Da steig ich grad nicht durch, kann aber auch an der Uhrzeit liegen.

Grüße
 
das data-attribut ist ein Initialisierungswert, genau. der data-value (ein virtueller Wert den jQuery intern verwaltet) hat nach dem ersten initialiseren nichts mehr mit dem Attribut zu tun. Wenn du das data-attribut ändern willst dann benutz .attr(), wenn du den data-value ändern willst dann benutz .data().

Hoffe jetzt wirds verständlich :)
Und das code-Beispiel soll einfach aufzeigen, dass wenn du den Wert über .data() änderst und dann wieder über .data() ausliest, der neue Wert genommen wird. Wenn du aber das attribut änderst, sich der data-Wert nicht ändert.
 
Dank dir für deine Erklärung Jeipack. Ich denke ich habs verstanden.
Zumindest werde ich das sehen wenn ich .data das nächste mal einsetze :).
Hier gings ja erstmal nur darum das .data für CSS zu ändern. Also nichts weltbewegendes.

Grüße
 
Kein Problem :) und genau das wollte ich auch noch schreiben. wenn du das data-attribut für CSS brauchst dann das Attribut ändern, sprich .attr() benutzen.
 

Neue Beiträge

Zurück