使用选择器再次调用 data() 时,动态创建元素并附加数据的 JQuery 不返回值?

发布于 2024-10-07 16:46:42 字数 614 浏览 0 评论 0原文

我动态创建一个 div 元素并将 data() 与其关联。当通过选择器再次访问它时,它不会返回数据。作为下面代码片段的结果,我看到第一个警报的数据为“1”,另一个警报的数据为“null”值。有人可以帮忙吗?

var dc = 0;
$("#attachData").click(function () {
         dc++;
  var newDiv = jQuery('#oldid').clone();
  newDiv.attr('id', 'dt'+dc);
  jQuery.data(newDiv, "dd", '1')

   alert(jQuery.data(newDiv, "dd"));

 var divFromSelector = $('#dt'+dc);
 alert(jQuery.data(divFromSelector, "dd"));
});

抱歉,我没有将它添加到代码片段中,而是将其附加到树上:

newDiv.attr('id', 'dt'+dc).
appendTo('#workspace-container'); 

此外,当我尝试使用选择器访问它时,元素会正确返回 - 但找不到数据。

I create a div element dynamically and associate data() to it. When accessing it again via selector it does not return the data. As result of below snippet I see first alert with data '1' and another with 'null' value. Can someone please help.

var dc = 0;
$("#attachData").click(function () {
         dc++;
  var newDiv = jQuery('#oldid').clone();
  newDiv.attr('id', 'dt'+dc);
  jQuery.data(newDiv, "dd", '1')

   alert(jQuery.data(newDiv, "dd"));

 var divFromSelector = $('#dt'+dc);
 alert(jQuery.data(divFromSelector, "dd"));
});

Sorry, I did not add it in the snippet but its attached to the tree:

newDiv.attr('id', 'dt'+dc).
appendTo('#workspace-container'); 

Also when I try to access it using selector the element is returned correctly - but no data found.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

与风相奔跑 2024-10-14 16:46:42

尝试:

var dc = 0;
$("#attachData").click(function () {
     dc++;
  var newDiv = jQuery('#oldid').clone();
  newDiv.attr('id', 'dt'+dc).appendTo('#workspace-container');
  jQuery.data(newDiv[0], "dd", '1')

  alert(jQuery.data(newDiv[0], "dd"));

  var divFromSelector = $('#dt'+dc);
  alert(jQuery.data(divFromSelector[0], "dd"));
});

文档看来,JQuery.data方法需要 DOM 元素,而不是 JQuery 对象。将 [0] 附加到 JQuery 对象会给出它所包装的 DOM 元素。

如果您使用 newDiv.data(...)divFromSelector.data(...) 可能会更好。

演示此处

Try:

var dc = 0;
$("#attachData").click(function () {
     dc++;
  var newDiv = jQuery('#oldid').clone();
  newDiv.attr('id', 'dt'+dc).appendTo('#workspace-container');
  jQuery.data(newDiv[0], "dd", '1')

  alert(jQuery.data(newDiv[0], "dd"));

  var divFromSelector = $('#dt'+dc);
  alert(jQuery.data(divFromSelector[0], "dd"));
});

From the docs it seems that the JQuery.data method expects a DOM element, not a JQuery object. Appending [0] to a JQuery object gives the DOM element it is wrapping.

It'd probably be better if you used newDiv.data(...) and divFromSelector.data(...).

Demo here.

耳钉梦 2024-10-14 16:46:42

看来您尚未在您访问的 DOM 中附加新节点。 http://api.jquery.com/clone/

It looks like you haven't attached the new node in the DOM your accessing. http://api.jquery.com/clone/

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文