with unappend remove quitar eliminate div delete attribute javascript jquery

javascript - unappend - ¿Cuál es la diferencia entre jQuery.data y jQuery._data(subrayado de datos)?



remove class jquery (1)

Mientras jQuery._data la fuente, noté que ''alternar'' supuestamente usa jQuery._data para almacenar el estado del elemento. Examiné el objeto jQuery.cache en Chrome y descubrí que el objeto de datos del elemento tenía otro objeto debajo de él, precedido por la palabra jQuery con un número que supongo que lo identifica de manera única. Sin embargo, no vi ningún dato sobre el estado del elemento. Simplemente {olddisplay: ''block''} . ¿Alguna pista sobre el propósito de jQuery._data y cómo funciona per se?

He estado mirando la fuente todo el día ... por favor, no me digas que la vea. Mis ojos y mi cerebro te lo agradecerán.


jQuery utiliza _data para establecer el indicador ''pvt'' para los datos que almacena en el objeto. El pvt se utiliza para que cuando solicite datos públicos del objeto, no se devuelvan los datos pvt. Esto es para evitar que el uso interno de jQuery del mecanismo .data() (como lo hace la alternancia) afecte el uso público de .data() .

Puedes ver esta declaración en la fuente de jQuery:

// For internal use only. _data: function( elem, name, data ) { return jQuery.data( elem, name, data, true ); },

Lo que simplemente llama a jQuery.data y obliga a que el cuarto parámetro (que es privacidad) sea verdadero. Al recuperar datos, si se establece el indicador pvt , entonces se recupera de una manera ligeramente diferente. Las interfaces públicas a .data() no exponen el indicador pvt .

Puede ver un ejemplo de manejo de pvt aquí en esta parte de jQuery.data() :

// An object can be passed to jQuery.data instead of a key/value pair; this gets // shallow copied over onto the existing cache if ( typeof name === "object" || typeof name === "function" ) { if ( pvt ) { cache[ id ][ internalKey ] = jQuery.extend(cache[ id ][ internalKey ], name); } else { cache[ id ] = jQuery.extend(cache[ id ], name); } }

y luego en esa misma función, este comentario es bastante descriptivo:

// Internal jQuery data is stored in a separate object inside the object''s data // cache in order to avoid key collisions between internal data and user-defined // data if ( pvt ) { if ( !thisCache[ internalKey ] ) { thisCache[ internalKey ] = {}; } thisCache = thisCache[ internalKey ]; }