新添加的dom元素未被选中

时间:2012-07-06 23:23:34

标签: javascript jquery

我有一个图像列表,可以通过ajax加载更多内容。默认情况下,图像会加载到列表中。当用户滚动时,另外4个项目被添加到列表中。该列表每15秒通过ajax刷新一次,只替换列表中的前7项。问题是当4个新项目添加到列表中时,选择器似乎忽略这些项目,因此它不会从0索引中进行选择。

我知道这听起来很混乱所以我会尝试用一个简单的例子演示。

实施例

$(function () {
    // Update ChannelStats
    setTimeout(function () {
        var refresh = setInterval(UpdateChannels, 15000);
        UpdateChannels();
    }, 15000);

    function UpdateChannels() {
        $.ajax({
            type: "POST",
            url: "ajax/ImageList.aspx/UpdateImages",
            data: "{}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
                // Newest
                var $newestResults = $('#newest .pcVideomaincontainer:lt(7)');
                $newestResults.fadeOut('slow'), function () {
                    remove()
                };
                $.each($newestResults, function (index, value) {
                    $(this).delay(index * 250).animate({
                        opacity: 0
                    }, 250,

                    function () {
                        $(this).remove();
                        $('#pcContentHolder_newest').append(data.d.Newest.HtmlChannelSegments[index]);
                    });
                });
            });
        }
    });

[注意数字的顺序 - 这是图片加载的顺序]

在初始页面加载时,第一张图像被加载

1。在初始页面上加载以下图像

  

1 2 3 4 5 6 7

2. 当用户滚动时,剩余的图像会显示

  

1 2 3 4 5 6 7 8 9 10 11

3. 更新脚本第一次运行

  

8 9 10 11 1 2 3 4 5 6 7

4. 更新脚本第二次运行

  

4 5 6 7 1 2 3 4 5 6 7

5. 更新脚本每次运行后,订单都是

  

4 5 6 7 1 2 3 4 5 6 7

据我所知,这4个新添加的元素不包括在内 $('#newest .pcVideomaincontainer:lt(7)')选择。我不确定如何在这种情况下使用“实时”,或者是否有其他技术。

2 个答案:

答案 0 :(得分:0)

我不确定这是否是您的主要问题,但是您的代码的这一部分在$(this).之前缺少remove()并且还缺少结束语。你有这个:

            var $newestResults = $('#newest .pcVideomaincontainer:lt(7)');
            $newestResults.fadeOut('slow'), function () {
                remove()
            };

应该是这样的:

            var $newestResults = $('#newest .pcVideomaincontainer:lt(7)');
            $newestResults.fadeOut('slow'), function () {
                $(this).remove()
            });

一旦你解决了这个问题,$ newestResults DOM对象都将被删除,所以我不确定你为什么再尝试用以下几行代码对它们进行操作。

答案 1 :(得分:0)

我从追加变为前置,现在可以正常工作。