jQuery添加一个类并在元素上循环它
jquery add a class and cycle it on the elements
我有一组这样的列表元素
<ul>
<li class="first"></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li class="last"></li>
</ul>
<div class="prev">PREVIOUS</div>
<div class="next">NEXT</div>
我需要在第二个和第三个 li 上添加一个类active
,然后当我单击下一步按钮时,这两个类将在列表中向下移动一个,到第三个和第四个列表,直到它们到达最后一个 li。此外,当我单击上一个按钮时,类将向上移动列表。
因此,当我的页面加载时,我需要有这个:
<ul>
<li class="first"></li>
<li class="active"></li>
<li class="active"></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li class="last"></li>
</ul>
<div class="prev">PREVIOUS</div>
<div class="next">NEXT</div>
然后当我单击下一个按钮时,就会发生这种情况
<ul>
<li class="first"></li>
<li></li>
<li class="active"></li>
<li class="active"></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li class="last"></li>
</ul>
<div class="prev">PREVIOUS</div>
<div class="next">NEXT</div>
等等。到目前为止,我有这个:
$(window).load( function(){
var ul = $('ul'),
li = ul.find('li');
var $prev=$('prev');
var $next=$('next');
li.eq(1).addClass('active');
li.eq(2).addClass('active');
$next.on('click', function(){
if(li.hasClass('active')){
li.removeClass('active');
}
////stuck
});
});
我试过只使用 .next().addClass('active')
,但这只会在所有列表项上添加active
类,我不需要它。
另外,我可以在删除和添加类之间有某种延迟吗?我将其用作旋转木马。接下来,我的整个未排序列表向左移动了一些像素,这有效。我需要添加类,以便我可以降低所有类的不透明度,除了那些active
类,所以我需要有一个平滑的过渡。
任何帮助,不胜感激。
首先,您的选择器$('prev')
和$('next')
正在尝试将元素与标签名称匹配 prev
和 next
。你的意思是.prev
和.next
,大概。
上一个很简单,你只需要.filter()
你的活动列表项,删除类,遍历到上一个元素,然后重新添加它:
$prev.on('click', function(){
li.filter('.active').removeClass('active').prev().addClass('active');
});
接下来是(有点)棘手的,因为我们需要先反转我们的 jQuery 对象:
$next.on('click', function(){
$(li.get().reverse()).filter('.active').removeClass('active').next().addClass('active');
});
JSFiddle
更新以使其还包括最后一个和第一个 li
这是另一种方式。您只需检查下一个或上一个元素是否具有第一个或最后一个类,如果有,则不要更改类。
var ul = $('ul'),
li = ul.find('li');
var $prev = $('.prev');
var $next = $('.next');
li.eq(1).addClass('active');
li.eq(2).addClass('active');
$next.on('click', function() {
var $a = $('.active');
if (!$($a[0]).next().hasClass('last')) // check if the first active li has next as last
$a.removeClass('active').next().addClass('active');
});
$prev.on('click', function() {
var $a = $('.active');
if (!$($a[1]).prev().hasClass('first')) // check if the last active li has prev as first
$a.removeClass('active').prev().addClass('active');
});
.active {
background: lightblue !important;
}
.first,
.last {
background: red;
}
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<ul>
<li class="first"></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li class="last"></li>
</ul>
<div class="prev">PREVIOUS</div>
<div class="next">NEXT</div>
对您的问题和我的解决方案进行了小提琴:)
新增以下内容:
var pointer = 1;
已修复(缺少一个点):
var $prev=$('.prev');
var $next=$('.next');
更新了这个:
li.eq(pointer).addClass('active');
li.eq(pointer+1).addClass('active');
并更新了您的上一个/下一个:
$next.on('click', function(){
if(li.hasClass('active')){
li.removeClass('active');
}
pointer++;
li.eq(pointer).addClass('active');
li.eq(pointer+1).addClass('active');
});
试试这个:
$(document).ready( function(){
var len = $('ul li').length;
$('.prev').click(function(){
if($('.active:first').index()!=0)
{
$('.active').each(function(){
$(this).removeClass('active').prev('li').addClass('active');
});
}
});
$('.next').click(function(){
if($('.active:last').index()!=(len - 1))
{
$('.active').each(function(){
$(this).next('li').addClass('active');
});
$('.active:first').removeClass('active');
}
});
});
演示
另一种方式
var ul = $('ul'),
li = ul.find('li');
var $prev=$('.prev');
var $next=$('.next');
li.eq(1).addClass('active');
li.eq(2).addClass('active');
$next.on('click', function(){
var lil = $("li.active:last").not(".last");
lil.prev().toggleClass("active");
lil.next().toggleClass("active");
});
$prev.on('click', function(){
var lil = $("li.active:first").not(".first");
lil.prev().toggleClass("active");
lil.next().toggleClass("active");
});
http://jsfiddle.net/098p4fLa/
- 如何使用jquery处理php循环通过元素
- 每个$.,循环获胜't逐个迭代HTML元素
- JS.循环遍历多维数组,以计数元素在每列中的出现次数
- js循环遍历单击的元素子节点
- $.每个jquery循环打印一个“;未定义的“;对于getJSON请求后的每个元素,网格数据都会完美地打印出来
- 循环遍历元素jquery选择器
- 特定循环(html元素)方法的优点和缺点
- 循环对象时更新页面上的DIV元素
- 基于事件在循环中隐藏元素
- 在元素数组上循环只会影响最后一个元素
- 关于动态元素中循环中的事件
- 在没有大量回调函数的情况下在列表元素上循环播放同一动画
- PHP:同时循环元素粘在一起
- AngularJs localStorage在循环中删除元素
- 按数据属性循环元素并替换值
- 如何使用 for 循环 jquery 将相应的值附加到相应的 dom 元素
- JQuery:如何在循环 dom 元素时正确缩进字符串
- 使用 for 循环用逗号分隔的值填充选择元素
- 翡翠:每4个元素循环一次,改变职业
- 如何在javascript中使用提取元素循环图像