在页面不断更新时使用jQuery的.each功能

时间:2018-07-19 05:37:57

标签: javascript jquery each

我整天都在努力寻找解决方案,但是我想不出一个可以工作的好方案。

基本上,我制作了一些jQuery / javascript代码,它们对网页上的某些项目运行each()循环。效果很好,但是当您滚动到底部时,它的页面会更新运行,从而添加更多结果。目前,我的脚本只能处理页面上加载的所有项目。我希望它能够浏览所有已加载的内容,然后滚动到底部并浏览所有新结果,并不断重复此过程。

我尝试了很多不同的解决方案,但似乎无法做出一个行之有效的解决方案。

任何帮助都将不胜感激。

谢谢:)

编辑:

以下是我到目前为止尝试过的一些概念:

  1. 将代码放入while循环中并添加偏移量,以便跳过所有已遍历的项目

    var a = 0;
    var offset = 0;
    while (a == 0) {
        jQuery('.Grid-cell .js-stream-item .ProfileCard').each(function (i, ele) { 
            if (i >= offset) {
                //Run script
            }
        });
        offset = offset + 18; //18 is how many new items are added each time
        setTimeout(function () {
                jQuery('html, body').animate({scrollTop:$(document).height()}, 'fast'); //To scroll to the bottom
        }, 5000); 
    }
    
  2. 将代码放入while循环中但没有偏移量

(与先前类似,但已删除偏移量,因为我认为它可以使已完成的操作更容易运行)

  1. 由于先前的尝试失败后我感到绝望,因此该实验更具实验性。基本上,我添加了一个隐藏的复选框,然后将脚本和每个循环放入函数中。然后,每当单击该复选框时,它将运行运行我的脚本的函数,并且每个循环完成后,它将滚动到页面底部,然后单击复选框以使该函数再次运行

    $( ".Footer-copyright" ).append( "<input type='checkbox' class='functionclass' style='display:none' value='no' />" );
    
    jQuery(".functionclass").on("click", function() {
            myfunction();
    })
    
    function myfunction() {
            jQuery('.Grid-cell .js-stream-item .ProfileCard').each(function (i, ele) {
                    //Run script
            });
            jQuery('html, body').animate({scrollTop:$(document).height()}, 'fast');
            jQuery(".functionclass").click();
    }
    
    jQuery(".functionclass").click();
    

1 个答案:

答案 0 :(得分:0)

因此,我相信我已经找到解决问题的方法。这并不是有史以来最干净的解决方案,但似乎可以完成工作。基本上,我已将任务放在setInterval()函数中,因此它现在每5秒完成一次任务,并在15个任务后滚动到底部。这使它每次运行时都能获得所有元素的更新列表。这是任何有好奇心的人的代码:

var i = 0;
task = setInterval(function(){
    var elements = jQuery(".Grid-cell .js-stream-item .ProfileCard"); //Gets all of the elemnts
    var element = jQuery(elements[i]); //Gets the element for the attempt number
    //Completes task
    if (i % 15 === 0){
        jQuery('html, body').animate({scrollTop:$(document).height()}, 'fast'); //Scrolls to bottom when attempt number is divisible by 15
    }
    i++;
}, 5000);