【问题标题】:Get length of all data attributes of element, but dynamically获取元素所有数据属性的长度,但动态
【发布时间】: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


【解决方案1】:

data 方法仅在第一次调用时读取自定义数据属性的值,如文档中所述。因此,要么使用 data 方法添加您的附加数据(然后 jQuery 将在内部处理存储),或者,如果您需要它们成为实际的自定义数据属性,请使用 HTMLElement.dataset 而不是 jQuery 的 data 方法。

这是一个DOMStringMap,它似乎没有任何长度或大小属性 - 因此您必须遍历所有条目,并在这样做时对它们进行计数。 https://stackoverflow.com/a/43021996/1427878 展示了如何使用简单的 for-in 循环来循环它们。

【讨论】:

  • 无需循环。 Object.keys(theElement.dataset).length 就够了。
  • @SebastianSimon 当然,通往罗马的道路总是多条。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-17
  • 2013-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多