微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

jQuery选择器

您好,我如何选择并添加一个类到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>

例:
现在我想将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'});
            });
        }    
    );
});

提前致谢

解决方法

试试这个: 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');
});​

编辑:一个小的修正.以前,如果您在第一个项目上悬停,则.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');
    });
});​

编辑:如果你有一个问题,正确删除正确的类,摆脱这行代码

$a.not(prev).not(next).removeClass('prev next');

并在处理程序的开头,将其替换为:

$a.removeClass('prev next');

要么:

$a.filter('.prev,.next').removeClass('prev next');

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐