在页面加载时,从数据库中选择了5个项目。当用户向下滚动时,会加载另外5个帖子,等等。
为了防止在按“新”排序时出现重复的帖子,我将页面加载时间放在隐藏的输入中以便在JavaScript中使用:
<input id="loadTime" type="hidden" value="<?php echo time(); ?>">
然后在滚动时抓取更多帖子我只选择之前的新帖子以防止重复发帖。
WHERE s.date < :loadTime
但是,我的问题是按Hot或Top排序时,因为它不使用相同的逻辑。
是否可以检测页面上的两个元素是否具有相同的ID?因为当重复的帖子附加到页面时,它将具有与其上已有的相同的ID。某种$(window).scroll()
有一个函数可以在之后删除重复的ID,以便用户看不到重复的帖子?
答案 0 :(得分:1)
我能够解决它:
在我添加新帖子后的成功函数中,我遍历页面上的所有ID(取自此answer,然后删除具有该id的最后一个元素。
$('[id]').each(function(){
var ids = $('[id="'+this.id+'"]');
if (ids.length>1 && ids[0]==this){
$("#"+this.id).last().remove();
}
});
答案 1 :(得分:0)
如何使用JavaScript请求传递初始加载时间,存储并发送您在上一组5中收到的上一篇文章的ID?
然后,您的服务器端逻辑可以(在事务中)读出&#34; hotness&#34;或&#34; topness&#34;或者创建日期,或者您对用户看过的最后一个帖子进行排序的任何值,然后选择价值低于该帖子值的5个下一个帖子。
答案 2 :(得分:0)
►是否可以检测页面上的两个元素是否具有相同的ID?
可以找到具有重复Id的元素。您可以使用属性
id
的选择。
<强>样本强>
if($('[id="same"]').length > 1){
alert("duplicate id")
}
// To remove last inserted element with duplicate ID
$('[id="same"]').last().remove()
&#13;
<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">
&#13;