我整天都在努力寻找解决方案,但是我想不出一个可以工作的好方案。
基本上,我制作了一些jQuery / javascript代码,它们对网页上的某些项目运行each()循环。效果很好,但是当您滚动到底部时,它的页面会更新运行,从而添加更多结果。目前,我的脚本只能处理页面上加载的所有项目。我希望它能够浏览所有已加载的内容,然后滚动到底部并浏览所有新结果,并不断重复此过程。
我尝试了很多不同的解决方案,但似乎无法做出一个行之有效的解决方案。
任何帮助都将不胜感激。
谢谢:)
编辑:
以下是我到目前为止尝试过的一些概念:
将代码放入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);
}
将代码放入while循环中但没有偏移量
(与先前类似,但已删除偏移量,因为我认为它可以使已完成的操作更容易运行)
由于先前的尝试失败后我感到绝望,因此该实验更具实验性。基本上,我添加了一个隐藏的复选框,然后将脚本和每个循环放入函数中。然后,每当单击该复选框时,它将运行运行我的脚本的函数,并且每个循环完成后,它将滚动到页面底部,然后单击复选框以使该函数再次运行
$( ".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();
答案 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);