1

免责声明:我完全知道该id属性适用于uniqueID。就我而言,当 ajax 请求比平时花费更长的时间时,它可能会出现故障,从而导致两条相同的聊天消息。我也知道有类似的问题,但我一直无法找到解决我的问题的问题。


这就是我想要做的:

  1. div 内是否有任何重复的 ID chat_log
  2. 这些是什么?
  3. 删除所有重复项
    • 确保原来的那个还在。

我尝试使用以下代码:

         $('[id]').each(function () {
            var ids = $('[id=' + this.id + ']');
            if (ids.length > 1 && ids[0] == this) {
                $(ids[1]).remove();
            }
        });

但是我不确定如何使该方法适应我的情况,也不确定是否可行。

4

2 回答 2

2

你怎么能确保某样东西是独一无二的?假设你有一堆蔬菜(黄瓜、萝卜、比萨饼等)。你想确保颜色的唯一性,确保任何颜色只出现一次。你是怎么做到的?

我要做的就是列一个清单。我会检查每一种蔬菜,检查它的颜色。如果颜色已经在列表中,我们将把该蔬菜从一堆中取出。否则,我们将其保留原样并将其颜色添加到我们的列表中。

一旦理解了这个逻辑,我们所需要的就是将其转换为代码!做一件多么微不足道的事情(当然是在纸上。)

//assumes $elem is the element you're deleting duplicates in

//create the ids list we'll check against
var ids = {};

//go over each element
var children = $elem.children();
for ( var i = 0, len = children.length; i < len; i++ ) {
    var id = children[ i ].id;

    //was this id previously seen?
    if ( ids.hasOwnProperty(id) ) {
        $( children[i] ).remove();
    }
    //a brand new id was discovered!
    else {
        ids[ id ] = true;
    }
}
//done!

这是非常简单、简单的逻辑版本。你可以用一些奇怪的嘶嘶声选择器做出更漂亮的方法,但这应该能让你开始。

演示(不带 jquery):http ://tinkerbin.com/qGJpPsAQ

于 2012-09-20T19:22:17.387 回答
1

您的代码应该可以工作,但它只会删除具有相同 ID 的第二个元素,试试这个:

$('[id]').each(function() {
    var $ids = $('[id=' + this.id + ']');
    if ($ids.length > 1) {
        $ids.not(':first').remove();
    }
});

http://jsfiddle.net/3WUwZ/

于 2012-09-20T19:15:26.897 回答