我有以下代码:
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/
答案 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");
});
这种方法有两个因素:
if
使得代码更加智能化根据品味设置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');
});
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;
只需为每次点击增加i
,当它到达结尾(div
的长度)时,它将被重置。