ArrayList
remove()
опирается на реализацию объектов метода Equal
. Если реализация не была выполнена, то объект удаляется реализацией Object
из Equals
, которая действительно является сравнением указателя.
Из документации по ArrayList
-
Более формально удаляется элемент с наименьшим индексом i такой, что
(o==null ? get(i)==null : o.equals(get(i)))
(если такой элемент существует)
Object equal
документация к методу -
Метод equals для класса Object реализует максимально различающее возможное отношение эквивалентности на объектах; то есть для любых ненулевых ссылочных значений
x
иy
этот метод возвращает истину тогда и только тогда, когдаx
иy
ссылаются на один и тот же объект (x == y
имеет значениеtrue
).
Хорошо, мне удалось воспроизвести вашу проблему, см. Пример на http://jsbin.com/ocaha .
Что происходит, так это то, что jQuery может видеть, что ваш пустой
не нужно убирать. Поэтому он считает анимацию выполненной и выполняется в течение 0 мс вместо ожидаемых 4000 мс. Таким образом, он немедленно начинает исчезать во всех всех из .adds
.
Чтобы предотвратить такое поведение, я бы отфильтровал все пустые элементы из выделения. Примерно так:
$(document).ready(function() {
$(".remove")
.filter(function(){ return ! $(this).is(":empty"); })
.fadeOut(4000, function(){
$(".add").fadeIn(5000);
});
});
См. Рабочий пример на http://jsbin.com/ovivi .