【问题标题】:HTML data attribute not changing [duplicate]HTML数据属性不变[重复]
【发布时间】:2021-07-03 11:01:47
【问题描述】:

我有这个 Html 代码,在每个段落标签中都有两个数据属性“数据标签”和“数据名称”。我还有两个按钮,“显示数据”和“设置数据”。

显示数据按钮在控制台上正确显示段落数据属性。

当我点击设置数据时,它应该将所有带有数据属性“标签”的段落标签更改为“完成”,但它不起作用。我做错了什么?

$("document").ready(function() {
  // Shows data attributes in console - WORKING
  $("#showdata").click(function() {
    $("p").each(function() {
      var tag = $(this).data("tag");
      var name = $(this).data("name");
      console.log(tag);
      console.log(name);
    });
  });

  // Change data attibute 'tag' - NOT WORKING
  $("#setdata").click(function() {
    $("p").each(function() {
      $(this).data("tag", "Complete");
      console.log($(this).data("tag"));
    });
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<p data-tag="tag1" data-name="p1">Item 1</p>
<p data-tag="tag2" data-name="p2">Item 2</p>
<p data-tag="tag3" data-name="p3">Item 3</p>

<button class="button" id="showdata">Show data</button>
<button class="button" id="setdata">Set data</button>

【问题讨论】:

  • 我给你做了一个 sn-p,当你点击它时会显示完成 - 你的 tag=setTag 不返回标签的数据
  • @TJCrowder 您标记的副本没有回答 OP 提出的问题。
  • 如果允许,请随时删除问题
  • var tag=$(this).data("tag", "Complete") 使用 chaining - 所以返回 $(this)。如果您单击显示,然后设置,然后再次显示,您可以看到它设置正确(使用问题的原始 v1,不一定是编辑),但您(曾经)只是输出错误的值。

标签: jquery custom-data-attribute


【解决方案1】:

问题是因为在#setdata 点击处理程序tag 在您调用data()setter 时持有一个jQuery 对象。它不保存数据属性的值。

为此,您需要调用data()getter,就像在#showdata 点击处理程序中所做的那样。

另请注意,在所有p 元素上设置相同的data() 值时,您不需要each() 循环。

let getData = () => {
  $("p").each(function() {
    var tag = $(this).data("tag"); // getter
    var name = $(this).data("name"); // getter
    console.log(tag, name );
  });
}

$("document").ready(function() {
  $("#showdata").click(getData);

  $("#setdata").click(function() {
    $("p").data("tag", "Complete"); // setter
    getData();
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<p data-tag="tag1" data-name="p1">Item 1</p>
<p data-tag="tag2" data-name="p2">Item 2</p>
<p data-tag="tag3" data-name="p3">Item 3</p>

<button class="button" id="showdata">Show data</button>
<button class="button" id="setdata">Set data</button>

【讨论】:

  • 我会说这个问题的评论就足够了
  • 我想说通过编辑来回答问题不是正确的方法。
  • 如果想法是关闭并删除它
  • 特别是如果 OP 无法删除,因为有 dupes 的答案,如果骗子不是 100% 你想说的话,那么我确信还有另一个骗子是
  • @Shree 哈哈!我的意思是对 mplungjan 没有恶意,事实上,他是我非常尊重的人。然而,IMO 这个问题的格式很好,值得回答。前两个重复是关于常见的数据/属性误解,因此在这里不相关。第三个骗局更接近,因为它解释了 getter/setter 之间的区别,但仍然没有为 OP 的具体情况提供解决方案,或者帮助他们理解为什么他们看到了他们所做的输出。不过,也许现在在 meta 上讨论这个更好,因为它很 OT。
猜你喜欢
  • 2013-10-15
  • 2017-08-22
  • 1970-01-01
  • 1970-01-01
  • 2013-07-28
  • 1970-01-01
  • 2019-08-29
  • 2023-01-05
  • 2017-01-12
相关资源
最近更新 更多