如何使用jQuery循环兄弟姐妹?

时间:2011-09-14 10:10:49

标签: javascript jquery next siblings

我有以下代码:

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 个答案:

答案 0 :(得分: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使得代码更加智能化
  3. 根据品味设置divs我更喜欢$selected.parent().children()超过等价$selected.siblings().add($selected)的价值 - 实际上有无穷无尽的可能性。

答案 1 :(得分:0)

一个简单的方法是:

$("#container").find("div:eq(0)").addClass("selected");

答案 2 :(得分:0)

怎么样。

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

以旧的良好的AI方式,你尝试做行为(addClass),如果它工作(长度&lt;&gt; 0)没有更多的事情要做,否则你再次尝试兄弟姐妹。

答案 3 :(得分: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');
});

&#13;
&#13;
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');
});
&#13;
.selected {
    background-color: yellow;   
}
&#13;
<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>
&#13;
&#13;
&#13;

只需为每次点击增加i,当它到达结尾(div的长度)时,它将被重置。