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);