オリジナル(以下の編集を参照)
Jan Dvorakが尋ねたように、要素が別の要素の複製であるとあなたが信じるプロパティはわかりませんが、以下は特に迅速ではありませんが、問題に対するより一般的な解決策です。
(function($) {
$.fn.removeDuplicates = function() {
var original = [];
this.each(function() {
var el = this, $el, isDuplicate;
$.each(original, function() {
$el = $(el);
// check whichever properties
// you believe determine whether
// it's a duplicate or not
if (el.tagName === this.tagName &&
el.className === this.className &&
el.id === this.id &&
el.value === this.value &&
el.href === this.href &&
$el.html() === $(this).html()) {
isDuplicate = true;
$el.remove();
}
});
if (!isDuplicate) {
original.push(el);
}
});
};
}(jQuery));
次のように使用します。
$('.test').removeDuplicates();
// .. or even
$('div').removeDuplicates();
// .. or even
$('.test.className').removeDuplicates();
ここに示すように、上記のすべてが期待どおりに機能するはずです。
編集
これを書いてから数年が経ち、Node.isEqualNodeについて学びました。これを行うためのはるかにクリーンな方法が提供されるため、更新されたプラグインは次のようになります(そして元の要素をチェーンに対して返します)。
(function($) {
'use strict';
$.fn.removeDuplicates = function() {
var $original = $([]);
this.each(function(i, el) {
var $el = $(el),
isDuplicate;
$original.each(function(i, orig) {
if (el.isEqualNode(orig)) {
isDuplicate = true;
$el.remove();
}
});
if (!isDuplicate) {
$original = $original.add($el);
}
});
return $original;
};
}(jQuery));
実例をここに示します。