jquery上有循环next()吗?
这是我的代码:
1 2 3
我希望每隔500毫秒获得每个div的内容。 当我到达第3个位置时,返回第一个位置,依此类推。 循环next()
。
试过:
var primoElem = $('.prova').first(); setInterval(function () { console.log(primoElem.html()); primoElem = primoElem.next(); }, 500);
但我只得到3个结果,然后就停止了。
当jQuery函数无法正常工作时,您可以随时通过保存旧函数并覆盖它来更改它。 或者,如果您不想更改jquery行为,也可以创建自己的函数。 例如,对于重写,在jquery加载后将其添加到代码中:
$.fn.oldNext = $.fn.next; $.fn.next = function(selector){ var selector = selector || ''; return this.oldNext(selector).length ? this.oldNext(selector) : this.siblings(selector).addBack(selector).first(); }
然后你的代码将工作。
如果您不想覆盖,只需更改名称:
$.fn.loopNext = function(selector){ var selector = selector || ''; return this.next(selector).length ? this.next(selector) : this.siblings(selector).addBack(selector).first(); }
然后这样称呼它:
primoElem.loopNext();
小提琴: http : //jsfiddle.net/EcnSH/
你可以这样做:
primoElem = primoElem.next(); if (!primoElem.length) primoElem = $('.prova').first();
有时没有标准函数完全按照您的要求进行操作,但这并不重要,只要它只是意味着您的特定需求被另外一行代码覆盖。
只需运行支票:
setInterval(function () { console.log(primoElem.html()); primoElem = primoElem.next().length ? primoElem.next() : $('.prova').first(); }, 500);
你也可以使用一个柜台:
var primoElemColl = $('.prova'), counter = 0; setInterval(function () { var primoElem = primoElemColl.eq(counter++ % primoElemColl.length); console.log(primoElem.html()); }, 500);
没有“最后到第一个”然而,我倾向于使用索引:在这里我向元素添加一个类,根据索引将其移动并返回顶部。
var primoElem = $('.prova'); var provaIndex = 0; var provaLastIndex = primoElem.length - 1 primoElem.eq(provaIndex).addClass('showmyprogress'); setInterval(function () { $('.showmyprogress').removeClass('showmyprogress'); provaIndex = (provaIndex === provaLastIndex) ? 0 : provaIndex + 1; primoElem.eq(provaIndex).addClass('showmyprogress'); }, 500);
展示它的实际效果: http : //jsfiddle.net/wb9V3/