Если вы включили свой HTML-код, мы могли бы ответить гораздо больше напрямую. Я вижу две потенциальные проблемы с вашим кодом.
1) При сравнении первого элемента в .each() не может быть .prev(), поэтому вы запрашиваете .css("left")
на пустом объекте jQuery. В лучшем случае это будет неопределенным, что, вероятно, не даст теста на равенство, но, как правило, не является хорошей идеей.
2) Если все ваши объекты .tarefa
не являются непосредственными братьями и сестрами без промежуточных объектов, то $(this).prev('.tarefa')
не делает то, что вы ожидаете.
Если вы проверите jQuery doc for .prev()
, он получит предыдущий брат, только если он соответствует этому классу. Он не получает предыдущий элемент в вашем объекте jQuery, поэтому, если ваши объекты .tarefa не являются непосредственными братьями и сестрами друг друга, ваш код не будет работать по желанию.
Вы можете исправить свой код защиты от обоих вопросов с этой версии:
$(function() {
i = 0 ;
var items = $('.tarefa');
items.each(function(index) {
i++;
if(index > 0 && $(this).css("left") == items.eq(index-1).css("left")){
alert(i);
}
});
});
EDIT Позже:
С HTML вы положили в свой комментарий, ваш исходный код будет реально работать. Первый проход через .each()
получит неопределенное значение для значения .prev() CSS, но оно соответствующим образом завершит ваше сравнение, и ваш исходный код действительно будет работать. Я бы не рекомендовал его, так как это гораздо более безопасный способ сделать это и, вероятно, тоже немного улучшится.
Параметр ' '.tarefa'' должны быть прямыми братьями и сестрами друг друга для' $ (это) .prev (' tarefa '.) 'Работать. –
Покажите нам разметку. Первоначальная мысль ... 'prev()' не относится к предыдущей итерации цикла 'each()'. Вместо этого он ссылается на элемент, который находится до '$ (this)' в DOM. –
Ответ: ** да **, они могут использоваться вместе (почему бы и нет?). Это может не всегда иметь смысл, хотя или не то, что вам нужно ... –