У меня проблема с методом .filter jQuery. Мой код выглядит следующим образом (сильно лишенный не соответствующих бит).jQuery «фильтр» не обновляется после удаления элементов
(function($) {
$.ticker = function(el, options) {
// to avoid scope issues, use 'base' instead of 'this'
var o, base = this;
base.el = el;
base.$el = $(el);
base.init = function() {
base.options = o = $.extend({}, $.ticker.defaultOptions, options);
base.$items = base.$el.find(' ul > li');
base.timer = null;
base.startTimer();
}
base.animate = function() {
base.$items.filter(':eq(0)').appendTo(base.$el.find('ul'));
}
// initialise the object
base.init();
};
$.ticker.defaultOptions = {
delay: 2000,
transitionSpeed: 700
}
$.fn.ticker = function(options) {
return this.each(function() {
(new $.ticker(this, options))
})
}
})(jQuery);
Что я ожидал бы это сделать, каждые 2 секунды, функция «base.animate» будет двигаться первый элемент LI от верхней части к нижней части тега UL. Это работает впервые, но для последующих итераций последний элемент LI (который раньше был первым) был перемещен в конец тега UL. Кажется, .filter (': eq (0)') постоянно ссылается на то, что раньше было первым, а не ссылалось на «текущий» первый элемент LI.
Как я могу обойти это?
Благодаря
Вы просто передаете одну и ту же коллекцию, поэтому, если вы снова не получите элементы из DOM, как вы можете ожидать, что эта же старая коллекция элементов будет обновляться. – adeneo