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/