2014-09-25 55 views
0

这里一类特殊的prev和next元素是我的代码:如何获得这不是同级

<ul> 
    <li class="active"> 
     <div class="course_video_heading"><span class="minus"></span> Introduction <div class="course_duration" align="right">1m 21s</div></div> 
     <ul> 
      <li class="course_video viewed"> 
       Welcome <div class="course_duration" align="right">1m 21s</div> 
      </li> 
      <li class="course_video viewed"> 
       I need to select this <div class="course_duration" align="right">1m 21s</div> 
      </li> 
     </ul> 
    </li> 
    <li> 
     <div class="course_video_heading"><span class="plus"></span> Warm up <div class="course_duration" align="right">1h 15m</div></div> 
     <ul> 
      <li class="course_video viewed current"> 
       Roll down <div class="course_duration" align="right">57s</div> 
      </li> 
      <li class="course_video"> 
       Roll down with demi pointe variation <div class="course_duration" align="right">57s</div> 
      </li> 
      <li class="course_video" data-file="http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4" data-image="http://content.bitsontherun.com/thumbs/nPripu9l-480.jpg"> 
       Side roll down <div class="course_duration" align="right">57s</div> 
      </li> 
      <li class="course_video"> 
       Side roll down variation with contraction <div class="course_duration" align="right">57s</div> 
      </li> 
      <li class="course_video"> 
       Class exercise <div class="course_duration" align="right">57s</div> 
      </li> 
     </ul> 
    </li> 
    <li> 
     <div class="course_video_heading"><span class="plus"></span> Brushes <div class="course_duration" align="right">1h 5m</div></div> 
     <ul> 
      <li class="course_video"> 
       Welcome <div class="course_duration" align="right">1m 21s</div> 
      </li> 
     </ul> 
    </li> 
</ul> 

我的要求:有一个元素,<li class="course_video viewed current">,我需要以前li其中有course_video类。在这种情况下,这将是:

<li class="course_video viewed"> 
    I need to select this <div class="course_duration" align="right">1m 21s</div> 
</li> 

什么有我想:

$(".current").prev(".course_video") 

这是行不通的,因为它是在不同的li

注:这是不是下面的问题重复:)

jQuery to find nearest Div of Parent

Getting next closest select element with jquery

jquery find closest previous sibling with class

+0

你可以尝试得到由类“course_video”的元素,那么它们之间找到类“当前”的元素,喜欢这里的http: //jsfiddle.net/0k541m6w/ – Dart 2014-09-25 07:10:41

回答

1

试试这个:读current里的指数,如果是0然后找到其父li以前li然后找到course_video。而如果指数不0,然后使用prev()

var index = $(".current").index(); 
if(index==0) 
{ 
    var previousLi = $(".current").closest('li').prev('li').find("li.course_video:last"); 
} 
else 
{ 
    var previousLi = $(".current").prev(".course_video"); 
} 
+0

这看起来很好,让我试试这个,但是我期待没有任何条件的解决方案 – 2014-09-25 06:51:09

0
$('.current').parents('li').prev().find('li:last') 

Here's the jsFiddle

+0

它就像一个分页,所以它应该在'li'中工作。 – 2014-09-25 06:50:34

0

可以与检查项目的索引功能做很容易找到以前li:如果指数为0,那么您将选择以前的ul中的最后一个li

Element.prototype.previousLi = function() { 
    var i = $(this).index(), 
     n = this.parentElement.previousSibling.children.length; 

    if (i) return this.parentElement.children[i-1]; 
    else return this.parentElement.previousSibling.children[n-1]; 
} 

然后,你可以这样做:

var el = $(".course_video.viewed.current")[0]; 
var previous = el.previousLi(); 
1
var vindex; 
$().ready(function() { 
    $("li .course_video").each(function (index) { 
     if ($(this).hasClass('current')) { 
      vindex = index; 
     } 
    }); 
    $("li .course_video").each(function (index) { 
     if (index == vindex - 1) { 
      alert($(this)[0].outerHTML); 
     } 
    }); 
}); 

这个代码将帮助你。

0

试试这个代码,它会给你想要的结果:

<script> 
    var currentLI = $("li.current"); 

    prevLi=$(currentLI).parent('ul').parent('li').prev('li').find('li.viewed:last'); 

    alert($(prevLi).html()); 
    </script>