tiene saber obtener name modificar insertar elemento div data contenido con codigo cambiar atributo asignar jquery html5

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() .