2013-01-09 16 views
6

Oto an example of what I have alreadyPokaż tylko najbliżsi elementy listy

Główne prace funkcjonalność, ale teraz muszę dokonać lista kontroler mniejsze, tak aby lepiej dopasować go do ekranu, jak to naprawione ustawione.

Sądzę, że powinien pokazać następne trzy elementy listy z aktywnego elementu i 2 poprzednie.

Coś jak to będzie działać, ale myślę, że nie powinno być krótsze i bardziej wygodny sposób:

//Display closest items 
$('#historyController li.active').prevAll('li:not(.first)').hide().slice(0,2).show(); 
$('#historyController li.active').nextAll('li:not(.last)').hide().slice(0,3).show(); 

jakieś wskazówki dla ponownego faktoringu kodem bieżącym dla lepszej wydajności byłby pomocny.

+2

'Coś jak to będzie działać, ale myślę, że powinno być krótszym i bardziej przekonującym sposobem "lub" wszelkie wskazówki dotyczące re-faktoringu obecnego kodu dla lepszej wydajności byłyby również pomocne "Jeśli nic nie jest zepsute, a twój kod działa, ale szukasz po prostu alternatywy lub lepszej aplikacji O, to pytanie może być lepsze na [Stackexchange - przegląd kodu] (http://codereview.stackexchange.com) – Nope

+0

Nie jestem pewien, czy w pełni rozumiem, ale czy "najbliższa" metoda pomoże ci tutaj: http: // api .jquery.com/closest/ – Paddy

Odpowiedz

0
<ul> 
    <li>list item 1</li> 
    <li>list item 2</li> 
    <li class="third-item">list item 3</li> 
    <li>list item 4</li> 
    <li>list item 5</li> 
</ul> 

$('li.third-item').next().css('background-color', 'red'); 

link do dokumentacji next()

to wszystkie elementy można wykorzystać do tree-traversal

0

korzystać z następujących funkcji jQuery.

<ul id="one" class="level-1"> 
<li class="item-i">I</li> 
<li id="ii" class="item-ii">II 
<ul class="level-2"> 
<li class="item-a">A</li> 
<li class="item-b">B 
<ul class="level-3"> 
<li class="item-1">1</li> 
<li class="item-2">2</li> 
<li class="item-3">3</li> 
</ul> 
</li> 
<li class="item-c">C</li> 
</ul> 
</li> 
<li class="item-iii">III</li> 
</ul> 

funkcja jQuery jest ..

$('li.item-a').closest('ul').css('background-color', 'red'); 
+0

To nie wygląda na to, czego szuka Algeron. Przeczytaj uważnie pytania przed opublikowaniem odpowiedzi. – Ren

0

Mógłbyś spróbować użyć .end(), aby zapisać na przesuwającego:

$('#historyController li.active').prevAll('li:not(.first)').hide().slice(0,2).show().end().end().nextAll('li:not(.last)').hide().slice(0,3).show();