【问题标题】:Jquery clone() doesn't clone new value set wit data()Jquery clone() 不会用 data() 克隆新值集
【发布时间】:2013-12-17 11:27:44
【问题描述】:

使用 jquery data() 设置元素的数据属性,如下所示:

HTML:

<div id="some-el" data-number="0"></div>

JQ:

$("#some-el").data("number",1);

众所周知,数据在内部会发生变化。所以在检查器内部你实际上看不到新值是 1。但除此之外,如果我用新数据值克隆元素,jquery 会克隆没有当前数据值的原始 dom 元素!!!

$("#some-el").clone();

在内部和可见的&lt;div id="some-el" data-number="0"&gt;&lt;/div&gt; 中产生结果!

我想我可以通过简单地使用attr("data-number",1);来避免这个问题

无论如何,我想问你这是否是 dat() 的正确行为?我看到的是预期的吗?为什么?

【问题讨论】:

标签: javascript jquery html


【解决方案1】:

我认为 clone 可以接受一个布尔值来表示带有数据和事件的克隆,所以 Clone(true) 应该可以工作:http://api.jquery.com/clone/

这是一个有效的小提琴:http://jsfiddle.net/2pdNL/

【讨论】:

  • 我猜 OP 指的是 this 行为。它没有显示在开发工具中。
  • 这会让生活更轻松,不想重写我的 js :) 谢谢!
  • Clone(true) 不适用于可排序的 jquery-ui!所以我不得不选择 attr 方式。
【解决方案2】:

.data() 没有在 DOM 中设置值。

data- 属性是在 第一次数据属性是 被访问,然后不再被访问或变异(所有数据值 然后存储在 jQuery 内部)

但这里有一个解决方法,而不是使用

$("#some-el").data("number",1);  

直接与 DOM 交互

$("#some-el").attr("data-number",1);

JSFiddle

也可以查看answer

【讨论】:

  • 你说什么我的问题中没有? :)
  • 另外请注意,如果你想将 js 对象设置为“data-number”(在这种情况下)属性的值,你必须对其进行字符串化。
猜你喜欢
  • 2017-05-05
  • 1970-01-01
  • 1970-01-01
  • 2021-06-21
  • 1970-01-01
  • 1970-01-01
  • 2013-01-19
  • 1970-01-01
  • 2013-02-21
相关资源
最近更新 更多