如何从div中删除重复的id,但保留原始ID

时间:2012-09-20 19:03:11

标签: javascript jquery html duplicates identifier

免责声明:我完全了解id属性适用于unique ID。在我的情况下,当ajax请求比平时花费更长时间时,它可能会出现故障,导致两条相同的聊天消息。我也知道有类似的问题,但是我找不到解决问题的方法。


这就是我想要做的事情:

  1. div chat_log中是否有任何重复的ID?
  2. 他们是什么?
  3. 删除所有重复项
    • 确保原始的仍在那里。

  4. 我尝试使用以下代码:

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

您的代码应该有效,但它只删除具有相同ID的第二个元素,请尝试:

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

http://jsfiddle.net/3WUwZ/