2012-12-19 14 views
12

Ho una tabella in cui fare clic su un collegamento dovrebbe mostrare "subrows" che appartengono ai dati nella riga su cui si fa clic.Attiva/disattiva il numero variabile di righe di tabella

Poiché il numero di subrow può variare da 0 a n, penso che dovrei calcolare il numero di subgrazie con il metodo .val, giusto? Quindi il valore dovrebbe essere il numero di righe invisibili con il nome di classe 'affiliato' fino al prossimo tr senza un nome di classe. Come posso fare questo? Ho fatto alcuni tentativi ma sono abbastanza nuovo per jQuery.

ho pensato qualcosa di simile per calcolare il numero di tr.affiliated:

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

DEMO

+0

Perché non usi l'attributo ID? probabilmente ti renderebbe la vita molto più semplice –

risposta

3

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

L'utilizzo del .val e .stop non hanno senso, e non si utilizza un ingresso, ma un a. Ho usato .nextUntil poiché le righe saranno raggruppate insieme; basta trovare la riga genitore più vicina allo a (questa è la riga "master") e utilizzare .nextUntil per trovare le sue righe affiliate - avanti fino all'altra riga principale. Sarebbe anche d'aiuto se le righe principali avessero una propria classe.

+0

Grazie per la spiegazione, ancora imparando molto, una delle mie prime cose che ho cercato di scrivere. La soluzione sembra buona e non richiede modifiche html. Apprezzo il tuo aiuto! – user1901096

+0

Mi dispiace disturbarti ancora per questo, ma ho trovato un "bug", a volte ho bisogno dei dati di due tr insieme. In questo caso la moglie di John e John, il problema è che il metodo più vicino non funziona più, vedi esempio: http://jsfiddle.net/6t6QT/2/ Come posso risolvere questo problema? – user1901096

+0

@ user1901096 Non vedo nulla della moglie di John .. volevi postare un link separato? –

8

Se si mette una classe su ciascun genitore tr è possibile utilizzare nextUntil() come questo:

<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 - Non ero nemmeno a conoscenza del metodo nextUntil(). Impara qualcosa di nuovo tutti i giorni :) – Syon

+1

Anche se la risposta è corretta, 'nextUntil()' è un metodo molto inefficiente ([link] (http://api.jquery.com/nextUntil/#comment-29884718)). Una soluzione migliore sarebbe raggruppare le subgrazie in un 'tbody' e alternare ciò. –

+0

grazie per la soluzione, potrebbe aggiungere una classe, anche se l'altra soluzione non ne ha bisogno. Grazie per l'aiuto, apprezzalo! – user1901096

Problemi correlati