使用.eq最接近上部div

时间:2016-03-21 14:28:56

标签: javascript jquery css

我已尝试使用.closest,.parents和.eq在页面加载时选择此div,并且无法弄清楚它为什么不起作用。我的HTML是:

<div class="top">
  <ul>
    <li>
      <div></div>
      <ul class="first"></ul>
      <div></div>
      <ul class="first active">
         <li><a class="current"></a></li>
      </ul>
      <ul class="first"></ul>
    </li>
  </ul>

所以在页面加载时我想要上面的div&#39; active&#39;改变颜色,但不能让它发挥作用。我试过了:

 $(document).ready(function () {
 if ($('.current').is(':visible')){
    $('.current').closest('div').addClass('active');
 });

5 个答案:

答案 0 :(得分:1)

我认为你正试图选择上一个兄弟姐妹。

$('.current:visible').each(function(){
    $(this).closest('ul').prev('div').addClass('active');
})

答案 1 :(得分:1)

你有不正确的选择器来定位所需的div。您需要首先遍历父级ul元素,然后遍历其先前的兄弟div。像这样:

$('.current:visible').closest('ul').prev().addClass('active');

答案 2 :(得分:1)

这应该有效:

$(document).ready(function () {
if ($('.current').is(':visible')){
   $('.current').parents('.active').prev('div').addClass('active');
});

答案 3 :(得分:1)

源代码中div以上.first.active是兄弟,而不是父母,因此closest()为什么在您使用的方法中不适合您

您可以使用closest()获取父ul,然后prev()获取您需要的div。试试这个:

if ($('.current').is(':visible')) {
    $('.current').closest('ul').prev('div').addClass('active');
});

答案 4 :(得分:1)

.closest将查找DOM树以找到最匹配的&#34; parental&#34;元件。你想要获得的div实际上是一个兄弟姐妹&#34; <ul>所以.closest无法找到它。

所以你需要前往<ul>,然后获得元素&#34;之前&#34;那个。

$(document).ready(function () {
 if ($('.current').is(':visible')){
    $('.current').closest('ul').prev('div').addClass('active');
 });