joh*_*ohn 5 jquery jquery-selectors
您好,我如何选择并添加一个类到prev和下一个标签.
<div class="sub">
<ul>
<li><a href="#">a</a>
<ul>
<li><a href="#">b</a>
<ul>
<li><a href="#">c</a></li>
<li><a href="#">d</a></li>
<li><a href="#">e</a></li>
</ul>
</li>
<li><a href="#">f</a></li>
<li><a href="#">g</a></li>
</ul>
</li>
<li><a href="#">h</a></li>
<li><a href="#">i</a></li>
<li><a href="#">j</a></li>
</ul>
</div>
Run Code Online (Sandbox Code Playgroud)
例如:现在我想2 CSS类(.prev&的.next)添加到该元件根据推定该鼠标位于元件<li><a href="#">g</a></li>,所以我想把2类添加到<li><a href="#">f</a></li>和<li><a href="#">h</a></li>
剪断:
$(document).ready(function() {
$('li').css({'border-top': '1px solid green','border-bottom': '1px solid green'});
$('li a').each(
function(intIndex){
$(this).mouseover(function(){
$(this).css({'border-top': '1px solid red','border-bottom': '1px solid red'});
$(this).prev().find('li').css({'border-bottom': 'none'});
$(this).next().find('li').css({'border-top': 'none'});
}).mouseout(function(){
$(this).css({'border-top': '1px solid green','border-bottom': '1px solid green'});
});
}
);
});
Run Code Online (Sandbox Code Playgroud)
提前致谢
试试这个:http://jsfiddle.net/rsEaF/1/
var $a = $('.sub li > a');
$a.mouseenter(function() {
var index = $a.index(this);
var prev = (index - 1 >= 0) ? $a.eq(index - 1).addClass('prev') : $();
var next = $a.eq(index + 1).addClass('next');
$a.not(prev).not(next).removeClass('prev next');
});?
Run Code Online (Sandbox Code Playgroud)
编辑:一个小的修正.以前,如果您悬停在第一个项目上,.prev该类将被添加到列表中的最后一个项目.这已得到纠正.
编辑:这是一个.each()用于分配处理程序的版本.这样做有点效率,因为它不需要$a.index(this);为每个调用mouseenter.
尝试一下: http ://jsfiddle.net/rsEaF/3/
var $a = $('.sub li > a');
$a.each(function(index) {
$(this).mouseenter(function() {
var prev = (index - 1 >= 0) ? $a.eq(index - 1).addClass('prev') : $();
var next = $a.eq(index + 1).addClass('next');
$a.not(prev).not(next).removeClass('prev next');
});
});?
Run Code Online (Sandbox Code Playgroud)
编辑:如果你有一个问题,正确删除正确的类,摆脱这行代码:
$a.not(prev).not(next).removeClass('prev next');
Run Code Online (Sandbox Code Playgroud)
并在处理程序的开头,将其替换为:
$a.removeClass('prev next');
Run Code Online (Sandbox Code Playgroud)
要么:
$a.filter('.prev,.next').removeClass('prev next');
Run Code Online (Sandbox Code Playgroud)
这应该有效。但它会循环遍历整个.subdiv,因此如果该列表变得非常长,则可能效率不高。
$(function() {
$('.sub li>a').hover(
function() {
var curr = this;
var last = '';
var found = false;
$('.sub li>a').each(function() {
if(found)
{
$(this).addClass('next');
return false;
}
if(this == curr)
{
found = true;
$(last).addClass('prev');
$(this).addClass('curr'); //you may want to do this too?
}
else
{
last = this;
}
});
},
function() {
$('.sub li>a.next').removeClass('next');
$('.sub li>a.prev').removeClass('prev');
}
);
});
Run Code Online (Sandbox Code Playgroud)