检测页面上两个元素是否具有相同的 ID


Detect if two elements have the same ID on a page

在页面加载时,从数据库中选择了 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">