jQuery选择器

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)

提前致谢

use*_*716 8

试试这个: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)


Jen*_*nni 1

这应该有效。但它会循环遍历整个.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)