过滤AJAX返回数据并对其中的选定元素执行.each

时间:2013-08-19 21:14:54

标签: javascript jquery javascript-events

让我们说,在点击之前我没有任何内容的4个标签(延迟加载概念)。

当:

单击Tab1:通过ajax将数据插入该选项卡。

单击Tab2:数据通过ajax插入该选项卡。

返回的数据包括:

<ul class="elements">
  <li>
    <div>Stuff</div>
    <ul class="comments">
      ...Initially empty
    </ul>
  </li>
</ul>

现在在成功函数中,我正在调用另一个函数来获取与父元素的子元素相关的所有注释,这就是我遇到麻烦的地方。

所以在将所有元素加载到选项卡后,我有这个需要刮刀的功能:

function LoadComments(data) {
  $newData = $(data).filter('ul.elements');
  $newData.find('ul.comments').each(function() {
    var commentsHome = $(this);

$.ajax({
  url: '/MyFeed.aspx',
  type: 'POST',
  dataType: 'html',
  data: {
    "xfd" : "GetComments',
  },
  success: function(data) {
    commentsHome.html(data);
  }
});
  });
}

到目前为止,我的变量commentsHome似乎没有起作用。我的目标是仅为新数据的每个返回元素加载注释。因此,当单击Tab2时,仅对单击Tab2后返回的数据执行此功能。

不确定我做错了什么:(

谢谢!

1 个答案:

答案 0 :(得分:0)

在AJAX成功函数中,您无法使用commentsHome 变量

但是,您可以创建一个隐藏的<input type="hidden" id="commentsHome" />并将值存储在那里,然后在AJAX成功函数中引用它。

function LoadComments(data) {
  $newData = $(data).filter('ul.elements');
  $newData.find('ul.comments').each(function() {
    $('#commentsHome').val($(this));


$.ajax({
  url: '/MyFeed.aspx',
  type: 'POST',
  dataType: 'html',
  data: {
    "xfd" : "GetComments',
  },
  success: function(data) {
    var commentsHome = $('#commentsHome).val();
    commentsHome.html(data);
  }
});