saber - obtener contenido de un div jquery
¿Por qué los cambios en jQuery $.fn.data() no actualizan los atributos html 5 data-*correspondientes? (2)
Aquí hay un ejemplo simple para ilustrar el comportamiento:
Dado este marcado de html:
<div data-company="Microsoft"></div>
y este código jQuery (usando jQuery 1.5.1):
// read the data
alert($("div").data("company"));
// returns Microsoft <<< OK!
// set the data
$("div").data("company","Apple");
alert($("div").data("company"));
// returns Apple <<< OK!
// attribute selector
alert($("div[data-company=''Apple'']").length);
// returns 0 <<< WHY???
// attribute selector again
alert($("div[data-company=''Microsoft'']").length);
// returns 1 <<< WHY???
// set the attribute directly
$("div").attr("data-company","Apple");
alert($("div[data-company=''Apple'']").length);
// now returns 1 <<< OK!
Dado que jQuery importa automáticamente los datos HTML5 * en el objeto de datos de jQuery, ¿no deberían actualizarse también los atributos cuando cambian los datos?
Este es el comportamiento correcto de acuerdo con los documentos:
Los atributos de datos se obtienen la primera vez que se accede a la propiedad de los datos y luego ya no se accede a ellos ni se los muda (todos los valores de los datos se almacenan internamente en jQuery).
(desde: http://api.jquery.com/data )
Normalmente, no hay necesidad de redondear .data()
si es consistente en el uso de .data () para acceder / establecer / modificar datos en elementos DOM. Por esa razón, tiene sentido evitar la sobrecarga de rendimiento al acceder al DOM para cada operación de ajuste / modificación de .data()
( .data()
almacena internamente sus valores en jQuery.cache
).
Si desea forzar el comportamiento de ida y vuelta usted mismo, puede suscribirse a los eventos "setData" o "changeData" y luego enviar la actualización .data()
en esos eventos al elemento DOM correspondiente a través de .attr()
.