jQuery与班级最接近的李并不起作用

时间:2014-06-08 15:36:33

标签: javascript jquery html css

我有菜单(类别列表),level-0 li有class" .cat_cat_h",level-1 .cat_par_c"

HTML:

<ul class="text-links">
        <li class="cat_cat_h level-0"><a href="#">Item 1</a></li>
        <li class="cat_cat_h level-0"><a href="#">Item 2</a></li>
        <li class="cat_cat_h level-0 active"><a href="#">Item 3</a></li>
        <li class="cat_par_c level-1" style="display: none;"><a href="#">Item 4</a></li>
        <li class="cat_par_c level-1" style="display: none;"><a href="#">Item 5</a></li>
        <li class="cat_par_c level-1" style="display: none;"><a href="#">Item 6</a></li>  
        <li class="cat_cat_h level-0"><a href="#">Item 7</a></li>
        <li class="cat_cat_h level-0"><a href="#">Item 8</a></li>
        <li class="cat_cat_h level-0"><a href="#">Item 9</a></li>
        <li class="cat_cat_h level-0"><a href="#">Item 2</a></li>
        <li class="cat_par_c level-1" style="display: none;"><a href="#">Item 7</a></li>  
        <li class="cat_par_c level-1" style="display: none;"><a href="#">Item 8</a></li>  
        <li class="cat_par_c level-1" style="display: none;"><a href="#">Item 9</a></li>  
</ul>

我想展示()仅在.level-0.active之后的第1级元素(第4项,第5项,第6项)。

更新

最终解决方案:

$(document).ready(function(){
$( ".level-0.active" ).nextUntil( ".level-0" ).show();
});

2 个答案:

答案 0 :(得分:1)

描述:对于集合中的每个元素,通过测试元素本身并遍历DOM树中的祖先来获取与选择器匹配的第一个元素。

Source

这意味着closest()功能在一个方向上起作用。如果你想转到父<ul>而回到另一个<li>,你必须先调用parent()函数,如下所示:

$(document).ready(function(){
   $(".cat_cat_h").parent('ul').find(".cat_par_c").show();
});
编辑后

编辑:

如果您想要选择元素的上一个和下一个元素,请尝试:

$(document).ready(function(){
   $( ".level-0.active" ).prev().show();
   $( ".level-0.active" ).next().show();
});

答案 1 :(得分:1)

为了回应Paulchenkiller,我会扩大我的答案。

流利的任何语言,口语(英语,西班牙语,意大利语,法语,德语等)或书面(html,css,javascript,c ++,pascal,basic等)都需要能够表达某种概念,想法或以各种不同的方式完成任务。

我会尝试用这个特殊的问题来解决这个特殊问题。

  1. jQuery选择器 - 上面已经很好地阐述了这一点,我可能做的唯一一个评论是在加载时间(微秒到毫秒)方面使用jQuery的微不足道的缺点,也许稍长一些运行比本机js(微秒)。

  2. CSS类 - 处理这个问题的一种方法是使用额外的css类 - 添加一个类,比如“li456”,它是一个“空”类,因为它不包含CSS样式,并且只是用于标识特定行或代码行。以FIDDLE为例。从某种意义上讲,它很难跟上代码,因为很多类附加到一行html上,并且需要在该部分甚至附加的样式表中查找其他类。

    < / LI>
          $(".li456").show();
    
    1. CSS ID - 更加繁琐,因为您只能在页面上使用一次id,因此在这种特殊情况下,需要三个ID。这同样适用于类的ID,更糟糕的是,你必须将id的数量查找为类的三倍 - 因为一个类可以与给定页面上的多个html行相关联。这是FIDDLE,其中显示了使用ID的示例。
    2.   $("#li4, #li5, #li6").show();
      
      1. CSS的一个变体是伪类的概念,它由CSS-Tricks的专家精心解释,他们对这些灵活而强大的方法(http://css-tricks.com/pseudo-class-selectors/)进行了很好的回顾。 :lt(x)选择类型的前x个元素。这是FIDDLE。 :lt()伪类特别适用于jquery,而不是CSS标准的一部分。
      2. $(".text-links .cat_par_c:lt(3)").show();
        
        1. 纯javascript也是一种可能性,但在这种特殊情况下,你必须为这三个元素添加一个id。这是FIDDLE
        2.   

          的document.getElementById( 'LI4')的style.display = '块'。
            的document.getElementById( 'LI5')的style.display = '块'。
            。的document.getElementById( 'LI6')的style.display = '块';

          1. 纯javascript可用于选择类名,并返回可由[n]解析的数组。这个FIDDLE显示了一个暴力方法的例子。这个FIDDLE使用for循环来遍历三个元素。
          2.   

            document.getElementsByClassName( 'cat_par_c')[n]的.style.display = '块';

            1. 然后我们转到“display”,可以用jQuery .show,.css('display','block')和javascript .style.display ='block'来处理。这个FIDDLE演示了这些方法。
            2. $('.cat_par_c:eq(0)').show();
              $('.cat_par_c:eq(1)').css('display', 'block');
              document.getElementsByClassName('cat_par_c')[2].style.display='block';
              
              1. 我敢打赌还有很多方法......