jquery上有循环next()吗?

mar*_*zzz 4 jquery

这是我的代码:

<div class="container">
    <div class="prova">1</div>
    <div class="prova">2</div>
    <div class="prova">3</div>
</div>
Run Code Online (Sandbox Code Playgroud)

我希望每隔500毫秒获得每个div的内容.当我到达第3个位置时,返回第一个位置,依此类推.一个圆形next().

试过:

var primoElem = $('.prova').first();
setInterval(function () {
    console.log(primoElem.html());
    primoElem = primoElem.next();
}, 500);
Run Code Online (Sandbox Code Playgroud)

但我只得到3个结果,然后就停止了.

Kar*_*non 7

当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();
}
Run Code Online (Sandbox Code Playgroud)

然后你的代码将工作.

如果您不想覆盖,只需更改名称:

$.fn.loopNext = function(selector){
    var selector = selector || '';
    return this.next(selector).length ? this.next(selector) : this.siblings(selector).addBack(selector).first();
}
Run Code Online (Sandbox Code Playgroud)

然后这样称呼它:

primoElem.loopNext();
Run Code Online (Sandbox Code Playgroud)

小提琴:http://jsfiddle.net/EcnSH/


Den*_*ret 5

你可以这样做:

primoElem = primoElem.next();
if (!primoElem.length) primoElem = $('.prova').first();
Run Code Online (Sandbox Code Playgroud)

有时候没有标准功能可以完全按照您的要求进行操作,但是它只是意味着您的特定需求被额外的代码行覆盖并不重要.