【发布时间】:2022-01-11 10:38:15
【问题描述】:
这段代码完美运行:
attributes = $("#testForm").data();
console.log(attributes);
console.log(Object.keys(attributes).length);
但只有一次,当我在点击事件上动态添加额外的数据属性时,它显示相同的值。我知道.data() 在某种程度上是缓存,但是如何动态处理它
例子:
<form id="testForm" data-id="33" data-size="45">
当我调用上面的代码时,它返回2,但是当我添加更多数据属性时,例如:
<form id="testForm" data-id="33" data-size="45" data-color="red" data-activity"1">
上面的代码仍然返回 2。
$(function ($) {
attributes = $("#testForm").data();
console.log(attributes);
console.log(Object.keys(attributes).length);
$('#testButton').on('click', function () {
$("#testForm").attr( 'data-size' , 'test' );
$("#testForm").attr( 'data-use' , 'test' );
attributes = $("#testForm").data();
console.log(attributes);
console.log(Object.keys(attributes).length);
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form class="filter-body" id="testForm" data-length="1">
<button id="testButton">test<button>
</form>
getAttribute() 和 attr() 需要特定的数据属性名称,在我的情况下,我将有 10,15 个或更多元素的数据属性,具有不同的名称,所以我可以传递特定的名称,我正在寻找获取所有它们的长度,但动态获取。
【问题讨论】:
-
“当我动态添加额外的数据属性时 onclick 事件” - 究竟如何?
-
请edit您的帖子并提供minimal reproducible example。
-
@DoroteyaGarbachkova “它仍然是 4” — 所以它有效吗?再次,请简单地edit 发帖并在那里提供所有必要的详细信息。 cmets 不用于逐个提供作为问题一部分的详细信息。
-
data方法仅在第一次调用时读取自定义数据属性的值(如文档中明确提到的那样。)所以要么添加您的附加数据使用 @987654335 @ 方法(然后 jQuery 将在内部处理存储),或者,如果您需要它们是实际的自定义数据属性,请使用 developer.mozilla.org/en-US/docs/Web/API/HTMLElement/dataset 而不是 jQuery 的data方法。
标签: javascript html jquery dom