Cómo establecer atributos de datos en elementos HTML
Tengo un div con un atributo data-myval = "10"
. Quiero actualizar su valor; ¿no cambiaría si utilizo div.data('myval',20)
? ¿Necesito usar solo div.attr('data-myval','20')
?
¿Me estoy confundiendo entre HTML5 y jQuery? Por favor avise. ¡Gracias!
EDITAR: Actualizado div.data('myval')=20
a div.data('myval',20)
, pero aún así el HTML no se está actualizando.
6 answers
HTML
<div id="mydiv" data-myval="10"></div>
JS
var a = $('#mydiv').data('myval'); //getter
$('#mydiv').data('myval',20); //setter
EDITAR (después del comentario):
Si se comprueba la referencia dada anteriormente, que dice:
JQuery usa el método
.data()
para guardar información bajo los nombres 'events' y 'handle', y también reserva cualquier nombre de datos que comience con un guion bajo ('_') para uso interno.
¿Por qué tendría que cambiar html?
Si se cambia el html es absolutamente necesario, debes usar .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>
Ver esta demo
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-29 06:20:30
Tenga en cuenta que jQuery .data()
no se actualiza cuando cambia los atributos html5 data-
con javascript.
Si utiliza jQuery .data()
para establecer atributos data-
en elementos HTML, es mejor que utilice jQuery .data()
para leerlos. De lo contrario, puede haber inconsistencias si actualiza los atributos dinámicamente. Por ejemplo, véase setAttribute()
, dataset()
, attr()
abajo. Cambie el valor, presione el botón varias veces y vea la consola.
$("#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>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-15 20:53:26
También puedes usar lo siguiente attr
;
HTML
<div id="mydiv" data-myval="JohnCena"></div>
Script
$('#mydiv').attr('data-myval', 'Undertaker'); // sets
$('#mydiv').attr('data-myval'); // gets
O
$('#mydiv').data('myval'); // gets value
$('#mydiv').data('myval','John Cena'); // sets value
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-06 13:12:35
Solución javascript de vainilla
HTML
<div id="mydiv" data-myval="10"></div>
JavaScript:
-
Usando DOM's
getAttribute()
propiedadvar 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
-
Usando JavaScript
dataset
propiedadvar myval = mydiv.dataset.myval //returns "10" mydiv.dataset.myval = '20' //changes "data-myval" to "20" mydiv.dataset.myval = null //removes "data-myval" attribute
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-02 16:56:35
Si estás usando jQuery, usa .data()
:
div.data('myval', 20);
Puede almacenar datos arbitrarios con .data()
, pero está restringido a solo cadenas cuando usa .attr()
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-23 06:31:45
[jQuery] .data() vs .attr () vs .extend ()
El método jQuery .data()
actualiza un objeto interno administrado por jQuery mediante el uso del método, si estoy en lo correcto.
Si desea actualizar su data-attributes
con un poco de propagación, utilice {
$('body').attr({ 'data-test': 'text' });
Otherwise de lo contrario, $('body').attr('data-test', 'text');
funcionará bien.
Otra forma de lograr esto es usando --
$.extend( $('body')[0].dataset, { datum: true } );
Restricts que restringe cualquier cambio de atributo a HTMLElement.prototype.dataset
, no cualquier adicional HTMLElement.prototype.attributes
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-17 08:10:25