6

我有以下代码:

html:

<div class="container">
    <div class="selected">A</div>
    <div>B</div>
    <div>C</div>
    <div>D</div>
</div>
<button id="next">next!</button>

jQuery:

$("#next").click(function() {
    $(".selected").removeClass("selected").next().addClass("selected");
});

我想要的是遍历容器中的 div。我可以这样做来循环:

$("#next").click(function() {
    if ($(".selected").next().length == 0) {
        $(".selected").removeClass("selected").siblings(":nth-child(1)").addClass("selected");
    }
    else {
        $(".selected").removeClass("selected").next().addClass("selected");
    }
});

但我认为有一个更简单的方法。我怎样才能让它更简单?(如果您不使用该next()功能,我不介意)。

jsfiddle:http: //jsfiddle.net/S28uC/

4

4 回答 4

13

我宁愿siblings.first()代替 . siblings(":nth-child(1)"),但本质上,如果不使用next().length.

更新:如果我是从头开始写的,我会这样做:

$("#next").click(function() {
    var $selected = $(".selected").removeClass("selected");
    var divs = $selected.parent().children();
    divs.eq((divs.index($selected) + 1) % divs.length).addClass("selected");
});

这种方法受两个因素的推动:

  1. 当你想无限期地循环一个集合时,你会想到取模
  2. 摆脱if使代码看起来更智能的原因

当根据口味设置divs我更喜欢$selected.parent().children()的值时$selected.siblings().add($selected)- 实际上有无限的可能性。

于 2011-09-14T10:14:08.363 回答
0

一种简单的方法是:

$("#container").find("div:eq(0)").addClass("selected");
于 2011-09-14T10:14:55.820 回答
0

这个怎么样。

...
var selected = $(".selected").removeClass("selected");
if (jQuery(selected).next().addClass("selected").length == 0
   {jQuery(selected).siblings().first().addClass("selected");};
...

以旧的良好 AI 方式,您尝试执行操作 (addClass),如果它有效 (length <> 0) 则无需再做任何事情,否则您将在第一个兄弟姐妹上重试。

于 2014-03-05T20:27:00.510 回答
0

你可以试试这个

var  cont   = $('.container'),
     i      = 0;
$("#next").on('click', function() {
    cont.children().removeClass('selected');
    i += 1;
    if ( i === document.querySelectorAll('.container div').length ) { i = 0; }
    cont.children().eq(i).addClass('selected');
});

var cont	= $('.container'),
	i 	    = 0;
    
$("#next").on('click', function() {
    cont.children().removeClass('selected');
    
    // increase index for each click
    i += 1;
    // reset i if it reached to last index
    //(hack to force next to go back to first element when we are at the end)
    if ( i === document.querySelectorAll('.container div').length ) {
    		i	=	0;
    }
  
    cont.children().eq(i).addClass('selected');
});
.selected {
    background-color: yellow;   
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
    <div class="selected">A</div>
    <div>B</div>
    <div>C</div>
    <div>D</div>
</div>

<button id="next">next!</button>

只需您i每次点击都会增加,当它到达末尾(divs 长度)时,它将被重置。

于 2016-05-26T20:45:25.990 回答