removeData()jquery方法不起作用

我认为我正在使用removeData但它似乎没有工作,这是我在开发控制台中看到的,有人能解释我做错了什么吗?

我正在输出当前的数据属性值,调用removeData,然后再次输出值,它仍在那里。

$('.questionList > li').eq(1).data('fieldlength') 3 $('.questionList > li').eq(1).removeData('fieldlength'); [ 
  • ​Birthdate​
  • ​ ] $('.questionList > li').eq(1).data('fieldlength') 3

    这是因为您的data源自HTML data-fieldlength属性。 根据文件 :

    当使用.removeData(“name”)时,如果内部数据缓存中没有该名称的属性,jQuery将尝试在元素上查找数据属性。 要避免重新查询data-属性,请将名称设置为null或undefined(例如.data(“name”,undefined)),而不是使用.removeData()。

    而不是

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

    你应该做

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

    有一些问题我想澄清以防万一其他人偶然发现它…

    如果你在元素上有HTML5 data-*属性,你需要使用jQuery的removeAttr()而不是removeData()如果你想从DOM中的元素中删除它们。

    例如,要从您需要使用的元素中实际删除数据属性:

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

    您可以使用$({selector}).data('fieldlength') 读取这样的值,但如果它们是页面源中存在的元素的HTML属性,则removeData()实际上不会删除它们(它只是删除它)在内存中,所以如果你用jQuery再次查询它,它似乎已被删除)。

    就个人而言,我认为这种行为已被打破,我肯定会抓住很多人。

    在隐藏字段中使用自定义数据属性来存储对象数据应该使用.removeAttr()代替.removeData()使用ID

    实际上这对我来说效果更好。 因为它在元素中保留了属性,但没有赋值。

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

    .removeData() 只会从jQuery的内部.data()缓存中删除数据,因此不会删除元素上的任何相应data-属性。 因此,稍后对data()调用将从元素的data-属性中重新检索该值。 要防止这种情况,请使用.removeAttr().removeData()来删除data-属性。

    例:

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

    然后设置:

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