Comment définir les attributs de données dans les éléments HTML
j'ai un div avec un attribut data-myval = "10"
. Je veux mettre à jour sa valeur; ne changerait-elle pas si j'utilise div.data('myval',20)
? Dois-je utiliser div.attr('data-myval','20')
?
est-ce que je confonds HTML5 et jQuery? Veuillez informer. Merci!
EDIT: mise à Jour div.data('myval')=20
à div.data('myval',20)
, mais encore le HTML n'est pas mise à jour.
6 réponses
HTML
<div id="mydiv" data-myval="10"></div>
JS
var a = $('#mydiv').data('myval'); //getter
$('#mydiv').data('myval',20); //setter
EDIT (après le commentaire):
si vous vérifiez la référence ci-dessus, qui dit:
jQuery lui-même utilise la méthode
.data()
pour enregistrer des informations sous les noms 'events' et' handle', et réserve également tout nom de données commençant par un underscore ( ' _ ' ) pour usage interne.
Pourquoi devez-vous changer html?
si changer le html est absolument nécessaire, vous devez utiliser .attr()
HTML
<div id="outer">
<div id="mydiv" data-myval="10"></div>
</div>
JS:
alert($('#outer').html()); // alerts <div id="mydiv" data-myval="10"> </div>
var a = $('#mydiv').data('myval'); //getter
$('#mydiv').attr("data-myval","20"); //setter
alert($('#outer').html()); //alerts <div id="mydiv" data-myval="20"> </div>
voir cette démo
veuillez noter que jQuery .data()
n'est pas mis à jour lorsque vous changez les attributs html5 data-
avec javascript.
si vous utilisez jQuery .data()
pour définir data-
attributs dans les éléments HTML, vous feriez mieux d'utiliser jQuery .data()
pour les lire. Sinon, il peut y avoir des incohérences si vous mettez à jour les attributs de manière dynamique. Par exemple, voir setAttribute()
, dataset()
, attr()
ci-dessous. Changer la valeur, appuyer sur le bouton plusieurs fois et voir la console.
$("#button").on("click", function() {
var field = document.querySelector("#textfield")
switch ($("#method").val()) {
case "setAttribute":
field.setAttribute("data-customval", field.value)
break;
case "dataset":
field.dataset.customval = field.value
break;
case "jQuerydata":
$(field).data("customval", field.value)
break;
case "jQueryattr":
$(field).attr("data-customval", field.value)
break;
}
objValues = {}
objValues['$(field).data("customval")'] = $(field).data("customval")
objValues['$(field).attr("data-customval")'] = $(field).attr("data-customval")
objValues['field.getAttribute("data-customval")'] = field.getAttribute("data-customval")
objValues['field.dataset.customval'] = field.dataset.customval
console.table([objValues])
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<h1>Example</h1>
<form>
<input id="textfield" type="text" data-customval="initial">
<br/>
<input type="button" value="Set and show in console.table (F12)" id="button">
<br/>
<select id="method">
<option value="setAttribute">setAttribute</option>
<option value="dataset">dataset</option>
<option value="jQuerydata">jQuery data</option>
<option value="jQueryattr">jQuery attr</option>
</select>
<div id="results"></div>
</form>
vous pouvez également utiliser la chose suivante attr
;
HTML
<div id="mydiv" data-myval="JohnCena"></div>
Script
$('#mydiv').attr('data-myval', 'Undertaker'); // sets
$('#mydiv').attr('data-myval'); // gets
ou
$('#mydiv').data('myval'); // gets value
$('#mydiv').data('myval','John Cena'); // sets value
Vanilla Javascript solution
HTML
<div id="mydiv" data-myval="10"></div>
JavaScript:
-
à l'Aide de DOM
getAttribute()
propriétévar brand = mydiv.getAttribute("data-myval")//returns "10" mydiv.setAttribute("data-myval", "20") //changes "data-myval" to "20" mydiv.removeAttribute("data-myval") //removes "data-myval" attribute entirely
-
utilisant JavaScript
dataset
propriétévar myval = mydiv.dataset.myval //returns "10" mydiv.dataset.myval = '20' //changes "data-myval" to "20" mydiv.dataset.myval = null //removes "data-myval" attribute
si vous utilisez jQuery, utilisez .data()
:
div.data('myval', 20);
vous pouvez stocker des données arbitraires avec .data()
, mais vous êtes limité aux chaînes de caractères quand vous utilisez .attr()
.
[jQuery] .de données() vs .attr () vs .extension()
la méthode jQuery .data()
met à jour un objet interne géré par jQuery grâce à l'utilisation de la méthode, si j'ai raison.
si vous voulez mettre à jour votre data-attributes
avec quelques spread, utilisez --
$('body').attr({ 'data-test': 'text' });
-- sinon, $('body').attr('data-test', 'text');
marchera très bien.
une autre façon d'accomplir ceci est d'utiliser --
$.extend( $('body')[0].dataset, { datum: true } );
-- qui restreint tout changement d'attribut à HTMLElement.prototype.dataset
, Non additionnel HTMLElement.prototype.attributes
.