在页面加载时,从数据库中选择了 5 个项目。当用户向下滚动时,还会加载 5 个帖子,依此类推。
为了防止按"new"排序时出现重复的帖子,我将页面加载时间放在要在 JavaScript 中使用的隐藏输入中:
<input id="loadTime" type="hidden" value="<?php echo time(); ?>">
然后,在滚动时获取更多帖子时,我只选择该时间之前的新帖子以防止重复帖子。
WHERE s.date < :loadTime
但是,我的问题是按热或顶部排序时,因为它不使用相同的逻辑。
是否可以检测页面上的两个元素是否具有相同的 ID?因为当重复的帖子附加到页面时,它将具有与页面上已有的 ID 相同的 ID。某种$(window).scroll()
有一个功能,可以在之后删除重复的ID,以便用户看不到重复的帖子?
我能够解决它:
在附加新帖子后的成功函数中,我遍历页面上的所有 ID(取自此答案,然后删除具有该 id 的最后一个元素。
$('[id]').each(function(){
var ids = $('[id="'+this.id+'"]');
if (ids.length>1 && ids[0]==this){
$("#"+this.id).last().remove();
}
});
与其使用 JavaScript 请求传递初始加载时间,不如存储并发送您在前一组 5 个帖子中收到的最后一篇文章的 ID?
然后,您的服务器端逻辑可以(在事务中)读出用户看到的最后一个帖子的"热门度"或"顶部"或创建日期,或者您排序的任何值,然后选择值小于该帖子值的 5 个下一个帖子。
►是否可以检测页面上的两个元素是否具有相同的 ID?
可以找到具有重复 ID 的元素。您可以将选择与属性
id
一起使用。
演示
if($('[id="same"]').length > 1){
alert("duplicate id")
}
// To remove last inserted element with duplicate ID
$('[id="same"]').last().remove()
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="same">
<input type="text" id="same">
<input type="text" id="same">
<input type="text" id="same" value="Last element">