jquery上有循环next()吗?

时间:2013-07-02 15:00:02

标签: jquery

这是我的代码:

<div class="container">
    <div class="prova">1</div>
    <div class="prova">2</div>
    <div class="prova">3</div>
</div>

我想每500分钟获得每个div的内容。当我到达第3个位置时,返回第一个位置,依此类推。通告next()

试过:

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

但我只得到3个结果,然后停止。

5 个答案:

答案 0 :(得分:7)

当jQuery函数无法正常工作时,您可以随时通过保存旧函数并覆盖它来更改它。或者,如果您不想更改jquery行为,也可以创建自己的函数。例如,对于重写,请在jquery load:

之后将其添加到代码中
$.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/

答案 1 :(得分:5)

你可以这样做:

primoElem = primoElem.next();
if (!primoElem.length) primoElem = $('.prova').first();

有时没有标准功能可以完全按照您的要求进行操作,但如果它只是意味着您的特定需求被另外一行代码覆盖,则无关紧要。

答案 2 :(得分:1)

只需检查一下:

setInterval(function () {
    console.log(primoElem.html());
    primoElem = primoElem.next().length ? primoElem.next() : $('.prova').first();
}, 500);

答案 3 :(得分:0)

您也可以使用计数器:

var primoElemColl = $('.prova'),
    counter = 0;
setInterval(function () {
    var primoElem = primoElemColl.eq(counter++ % primoElemColl.length);
    console.log(primoElem.html());
}, 500);

答案 4 :(得分:0)

没有“最后到第一个”然而,我倾向于使用索引:在这里我向元素添加一个类,根据索引将其移动并返回顶部。

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/