J'ai un div avec un attribut data-myval = "10"
. Je veux mettre à jour sa valeur; cela ne changerait-il pas si j'utilisais div.data('myval',20)
? Dois-je utiliser div.attr('data-myval','20')
uniquement?
Suis-je confus entre HTML5 et jQuery? S'il vous plaît donnez votre avis. Merci!
EDIT: mis div.data('myval')=20
à jour vers div.data('myval',20)
, mais le HTML n'est toujours pas mis à jour.
jquery
html
custom-data-attribute
Pulkit Mittal
la source
la source
div
? Un objet ou un élément jQuery?div.data('myval')=20
ne fonctionnerait pas pour stocker une valeur uniquement parce que la syntaxe est incorrecte - voir les réponses pour la syntaxe correcte. Mais notez que cela.data()
ne met pas réellement à jour l' attribut d' élément , il stocke les données ailleurs.Réponses:
HTML
JS
Démo
Référence
De la référence:
Il convient de noter que jQuery
data()
ne modifie pas l'data
attribut en HTML.Donc, si vous devez modifier l'
data
attribut en HTML, vous devez utiliser à la.attr()
place.HTML
JS:
Voir cette démo
la source
data()
toget
etset
HTML-5.[data-myval="10"]{ color: red; }
, elle styliserait la balise en fonction de la valeur de l'attribut data.Vous pouvez également utiliser la
attr
chose suivante ;HTML
Scénario
OU
la source
Veuillez noter que jQuery
.data()
n'est pas mis à jour lorsque vous modifiez lesdata-
attributs html5 avec javascript.Si vous utilisez jQuery
.data()
pour définir desdata-
attributs dans des éléments HTML, il vaut mieux utiliser jQuery.data()
pour les lire. Sinon, il peut y avoir des incohérences si vous mettez à jour les attributs dynamiquement. Par exemple, voirsetAttribute()
,dataset()
,attr()
ci - dessous. Modifiez la valeur, appuyez plusieurs fois sur le bouton et voyez la console.Afficher l'extrait de code
la source
Solution Javascript vanille
HTML
JavaScript:
Utilisation de la
getAttribute()
propriété DOMUtilisation de la
dataset
propriété JavaScriptla source
Si vous utilisez jQuery, utilisez
.data()
:Vous pouvez stocker des données arbitraires avec
.data()
, mais vous êtes limité à des chaînes uniquement lors de l'utilisation.attr()
.la source
.data()
méthode ne met pas à jour lesdata-
attributs - c'est-à-dire que les données qu'elle stocke ne se retrouvent pas dans un attribut (c'est pourquoi elle peut stocker des valeurs non-chaîne) même si elle peut récupérer la valeur d'undata-
attribut. Bien que je pense que l'OP n'a pas vraiment besoin de définir d' attributs, même si c'est ce que la question a posé..attr()
pour récupérer l'attribut). J'ai juste pensé que cela valait la peine d'être souligné étant donné que l'OP demandait explicitement (si peut-être à tort) de mettre à jour les attributs..attr()
vous ne mettez pas vraiment à jour "le HTML", vous mettez à jour le DOM. Lorsque vous demandez au navigateur de vous donner le "html" (que ce soit par.html()
ou par le DOMelement.innerHTML
), le navigateur le régénère efficacement pour vous en fonction de l'état du DOM à l'époque. Sorte de.[jQuery] .data () vs .attr () vs .extend ()
La méthode jQuery
.data()
met à jour un objet interne géré par jQuery via l'utilisation de la méthode, si j'ai raison.Si vous souhaitez mettre à jour votre
data-attributes
avec une certaine propagation, utilisez -- sinon,
$('body').attr('data-test', 'text');
ça marchera très bien.Une autre façon d'y parvenir est d'utiliser -
- qui restreint tout changement d'attribut à
HTMLElement.prototype.dataset
, pas tout autreHTMLElement.prototype.attributes
.la source
Une autre façon de définir l'attribut data- utilise la propriété d' ensemble de données .
la source
Pour garder jQuery et le DOM synchronisés, une option simple peut être
la source