removeData()jquery方法不起作用

时间:2013-05-17 18:09:35

标签: jquery custom-data-attribute

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

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

$('.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

6 个答案:

答案 0 :(得分:31)

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

如果您对某个元素有HTML5 data-*属性,则需要使用jQuery的removeAttr()代替removeData(),如果您想从DOM中的元素中删除它们。

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

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

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

就我个人而言,我认为这种行为已被打破,我确信会吸引很多人。

答案 1 :(得分:28)

这是因为您的data来自HTML data-fieldlength属性。根据{{​​3}}:

  

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

所以而不是

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

你应该做

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

答案 2 :(得分:2)

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

一种选择是使用DOM自己的remove方法。索引0引用jQuery结果集中的第一个DOM元素,因此您可以对其直接进行DOM调用。

console.log($('[data-fieldlength]').data('fieldlength'));
$('[data-fieldlength]')[0].removeAttribute('data-fieldlength');
console.log($('[data-fieldlength]').data('fieldlength'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div data-fieldlength="42">Hello Elliot</div>