2012-12-19 13 views
12

Mam tabelę, w której kliknięcie łącza powinno pokazywać "subrows", które należą do danych w kliknięciu wiersza.Przełącz zmienną liczbę wierszy tabeli

Ponieważ liczba subrow może być różna od 0 do n Myślę, że powinienem obliczyć liczbę subrowów metodą .val, czy to prawda? Tak więc wartość powinna być liczbą niewidocznych wierszy z nazwą klasy "powiązaną" do następnej tr bez nazwy klasy. Jak mogę to zrobić? Zrobiłem kilka prób, ale jestem całkiem nowy w jQuery.

Myślałem coś takiego obliczyć liczbę tr.affiliated:

var affiliatednumber = $(this).find("tr.affiliated").val().stop(); 

DEMO

+0

Dlaczego nie używasz atrybutu ID? prawdopodobnie znacznie ułatwiłoby ci życie –

Odpowiedz

3

http://jsfiddle.net/6t6QT/2/

Korzystanie z .val i .stop nie ma sensu i nie używasz wejście ale a. Użyłem .nextUntil, ponieważ wiersze zostaną zgrupowane; po prostu znajdź najbliższy wiersz nadrzędny a (jest to wiersz "główny") i użyj .nextUntil, aby znaleźć powiązane wiersze - następne, aż do drugiego rzędu głównego. Pomogłoby to również, gdyby wiersze nadrzędne miały własną klasę.

+0

Dzięki za wyjaśnienie, wciąż dużo się uczę, jedną z moich pierwszych rzeczy, które próbowałem napisać. Rozwiązanie wygląda dobrze i nie wymaga żadnych zmian html. Doceniam Twoją pomoc! – user1901096

+0

Przepraszam, że znowu ci przeszkadzam, ale znalazłem "błąd", czasami potrzebuję danych dwóch trów razem. W tym przypadku John i John's żona, problem polega na tym, że najbliższa metoda nie działa, zobacz przykład: http://jsfiddle.net/6t6QT/2/ Jak mogę to naprawić? – user1901096

+0

@ user1901096 Nie widzę nic na temat żony Johna .. Czy chciałeś zamieścić osobny link? –

8

Jeśli umieścisz klasę na każdym z rodziców tr można użyć nextUntil() tak:

<tbody> 
    <tr class="parent"> 
     <td>John</td> 
     <td>HR Admin</td> 
     <td>10/10/1980</td> 
     <td>Yes</td> 
     <td><a class="showaffiliated" href="#">Yes</a></td> 
    </tr> 
    <tr class="affiliated"> 
     <td colspan="2">Amanda</td> 
     <td colspan="3">20/20/1985</td> 
    </tr> 
    <tr class="affiliated"> 
     <td colspan="2">Louis</td> 
     <td colspan="3">20/10/2010</td> 
    </tr> 
</tbody> 
$("tr.affiliated").hide(); 

$("a.showaffiliated").click(function() { 
    var $affiliated = $(this).closest(".parent").nextUntil(".parent"); 
    $affiliated.toggle(); 
    var affiliatednumber = $affiliated.length; 
}); 

Example fiddle

+1

Nice - Nie wiedziałem nawet o metodzie nextUntil(). Naucz się czegoś nowego codziennie :) – Syon

+1

Mimo że odpowiedź jest prawidłowa, 'nextUntil()' jest bardzo nieefektywną metodą ([link] (http://api.jquery.com/nextUntil/#comment-29884718)). Lepszym rozwiązaniem byłoby pogrupowanie subrowów w 'tbody' i przełączenie tego. –

+0

dzięki za rozwiązanie, można dodać klasę, chociaż inne rozwiązanie nie potrzebuje. Dzięki za pomoc, doceń to! – user1901096

Powiązane problemy