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

Javascript 使用选择器再次调用data()时,动态创建元素和附加数据的JQuery不返回值?,javascript,jquery,dynamic,Javascript,Jquery,Dynamic,我动态创建一个div元素,并将data()与之关联。当通过选择器再次访问它时,它不会返回数据。根据下面的代码片段,我看到第一个警报的数据为“1”,另一个警报的值为“null”。有人能帮忙吗 var dc = 0; $("#attachData").click(function () { dc++; var newDiv = jQuery('#oldid').clone(); newDiv.attr('id', 'dt'+dc); jQuery.data(newDiv

我动态创建一个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'); 

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

看起来您尚未在访问的DOM中附加新节点

看起来您尚未在访问的DOM中附加新节点

试试看:

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(…)
,可能会更好

演示。

尝试:

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(…)
,可能会更好


演示。

没问题,只需修改您原来的帖子。。。尝试使用一个新行的前导,将所有行缩进4个空格以表示“代码”块。Dave-感谢您的回复。我已将其附加到节点。了解这一点会有所帮助吗?看到@sje397上面的回复,很高兴您解决了这个问题。也请注明你接受的答案。没问题,只需修改你原来的帖子。。。尝试使用一个新行的前导,将所有行缩进4个空格以表示“代码”块。Dave-感谢您的回复。我已将其附加到节点。了解这一点会有所帮助吗?看到@sje397上面的回复,很高兴您解决了这个问题。请在你接受的答案上加上记号,这是一个很大的帮助。我很困惑,因为第一个警报确实返回了data(),即使我传递了JQUery对象,但下一次却没有。这解决了我的问题。非常感谢。这是一个很大的帮助。我很困惑,因为第一个警报确实返回了data(),即使我传递了JQUery对象,但下一次却没有。这解决了我的问题。谢谢。