1

免責事項:id属性がuniqueID用であることは十分承知しています。私の場合、ajax リクエストに通常より時間がかかると、エラーが発生し、2 つの同じチャット メッセージが発生する可能性があります。このような同様の質問があることも認識していますが、私の問題を解決する質問を見つけることができませんでした。


これは私がやりたいことです:

  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

何かが一意であることをどのように確認できますか? たくさんの野菜 (キュウリ、カブ、ピザなど) があるとします。どの色も 1 回しか表示されないようにして、色の一意性を確保する必要があります。どうやってやったの?

私がすることはリストを作ることです。私はすべての野菜を調べて、その色を調べます。その色がすでにリストにある場合は、その野菜を束から外します。それ以外の場合は、そのままにして、その色をリストに追加します。

そのロジックを理解したら、コードに変換するだけです。(もちろん、紙の上では。)

//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 を持つ 2 番目の要素のみを削除します。これを試してください。

$('[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 に答える