removeData () no funciona el método jquery


Creo que estoy usando removeData correctamente pero no parece estar funcionando, esto es lo que estoy viendo en la consola dev, ¿podría alguien explicar lo que estoy haciendo mal?

Estoy enviando el valor del atributo de datos actual, llamando a removeData, luego enviando el valor de nuevo y sigue ahí.

$('.questionList > li').eq(1).data('fieldlength')
3
$('.questionList > li').eq(1).removeData('fieldlength');
[
<li class=​"questionBox" data-createproblem=​"false" data-fieldlength=​"3" data-picklistvalues data-required=​"true" data-sfid=​"a04d000000ZBaM3AAL" data-type=​"Text">​
<div class=​"questionLabel">​Birthdate​</div>​
</li>​
]
$('.questionList > li').eq(1).data('fieldlength')
3
Author: turbo2oh, 2013-05-17

5 answers

Es porque su data se origina en el atributo HTML data-fieldlength. Según los documentos :

Cuando se usa .removeData ("nombre"), jQuery intentará localizar un dato- atributo en el elemento si no hay ninguna propiedad con ese nombre en el caché de datos interna. Para evitar una re-consulta del atributo data, establezca el nombre de un valor de null o undefined (por ejemplo .datos ("nombre", undefined)) en lugar de usar .removeData().

Así que en su lugar de

$('.questionList > li').eq(1).removeData('fieldlength');

Usted debe hacer

$('.questionList > li').eq(1).data('fieldlength',null);
 27
Author: Blazemonger,
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
2013-05-17 18:17:26

Hay un poco de gotcha que quería aclarar en caso de que alguien más tropiece con él...

Si tiene atributos HTML5 data-* en un elemento, debe usar removeAttr() de jQuery en lugar de removeData() si desea eliminarlos del elemento en el DOM.

Por ejemplo, para eliminar realmente un atributo de datos de un elemento necesita usar:

$({selector}).removeAttr('data-fieldlength');

Puedes leer valores como este con $({selector}).data('fieldlength') pero removeData() en realidad no los elimina si son atributos HTML en un elemento presente en el origen de la página (simplemente lo elimina en la memoria, de modo que si lo consulta de nuevo con jQuery, aparece como eliminado).

Personalmente creo que este comportamiento está roto y estoy seguro de que atrapa a mucha gente.

 30
Author: Iain Collins,
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-25 05:37:16

En el campo oculto usando el atributo de datos personalizados para almacenar datos de objetos Debería usarlo .removeAttr() en lugar de .removeData () usando ID

 2
Author: Sandesh Chavan,
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-02-23 04:42:08

En realidad esto funciona mejor para mí. Porque deja el atributo intacto en el elemento pero sin valor asignado.

$(selector).attr("data-fieldlength","");
 1
Author: Gardoku,
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-04-17 17:55:26

.removeData() solo eliminará datos de la caché interna .data() de jQuery por lo que no se eliminarán los atributos data- correspondientes en el elemento. Una llamada posterior a data() volverá a recuperar el valor del atributo data- del elemento. Para evitar esto, use .removeAttr() alongside .removeData() para eliminar el atributo data- también.

Ejemplo:

$('div').removeData('info');
$('div').removeAttr('data-info');

Luego establece:

$('div').data('info', 222);
$('div').attr('data-info', 222);
 0
Author: ztrat4dkyle,
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-01-27 20:40:09