val remove empty div data clean attribute jquery custom-data-attribute

empty - El método jquery removeData() no funciona



jquery remove data attribute (5)

Creo que estoy usando removeData correctamente pero no parece estar funcionando, esto es lo que veo en la consola de desarrollo. ¿Alguien podría explicar lo que estoy haciendo mal?

Estoy emitiendo el valor del atributo de datos actual, llamando a removeData, y luego estoy emitiendo el valor nuevamente 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


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


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

$(selector).attr("data-fieldlength","");


Es porque sus data originan en el atributo de data-fieldlength HTML. Según api.jquery.com/removeData :

Cuando se usa .removeData ("nombre"), jQuery intentará ubicar un atributo de datos en el elemento si no hay ninguna propiedad con ese nombre en el caché de datos interno. Para evitar una nueva consulta del atributo de datos, establezca el nombre en un valor de nulo o no definido (por ejemplo, .data ("nombre", no definido)) en lugar de usar .removeData ().

Así que en lugar de

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

deberías hacer

$(''.questionList > li'').eq(1).data(''fieldlength'',null);


Hay un poco de lo que quise aclarar en caso de que alguien más lo encuentre ...

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

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

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

Puede leer valores como este con $({selector}).data(''fieldlength'') pero removeData() 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 vuelve a consultar con jQuery parece que se ha eliminado).

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


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

Ejemplo:

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

Luego establece:

$(''div'').data(''info'', 222); $(''div'').attr(''data-info'', 222);