La fonction .data() de jQuery fait plusieurs choses, mais elle n'ajoute pas les données au DOM en tant qu'attribut. Lorsque vous l'utilisez pour saisir un attribut de données, la première chose qu'il fait est de créer un objet de données jQuery et de définir la valeur de l'objet à l'attribut de données. Après cela, elle est essentiellement découplée de l'attribut de données.
Exemple :
<div data-foo="bar"></div>
Si vous avez saisi la valeur de l'attribut à l'aide de la fonction .data('foo')
il renvoie "bar", comme vous vous y attendez. Si vous modifiez ensuite l'attribut en utilisant .attr('data-foo', 'blah')
puis, plus tard, utiliser .data('foo')
pour récupérer la valeur, il renverrait "bar" même si le DOM dit que data-foo="blah"
. Si vous utilisez .data()
pour définir la valeur, cela changera la valeur dans l'objet jQuery mais pas dans le DOM.
En gros, .data()
sert à définir ou à vérifier la valeur des données de l'objet jQuery. Si vous le vérifiez et qu'il n'en a pas encore, il crée la valeur en se basant sur l'attribut data qui se trouve dans le DOM. .attr()
sert à définir ou à vérifier la valeur de l'attribut de l'élément DOM et ne touchera pas la valeur des données jQuery. Si vous avez besoin qu'elles changent toutes les deux, vous devez utiliser les deux méthodes suivantes .data()
y .attr()
. Sinon, restez-en à l'un ou l'autre.