2011-12-13 16 views
10

Vorrei ottenere l'ultimo visibiletd in ogni tr in una tabella.Selezionare ogni ultimo figlio visibile in jQuery

Questo non funziona perché tenta di selezionare l'ultimo figlio se è visibile:

var last_visible_cells = $(table).find("tr td:visible:last-child"); 

Finora il metodo più semplice che ho pensato è quello di utilizzare un .each per scorrere la tr elementi e aggiungere ciascuno degli ultimi td s visibili a un nuovo elenco di selezione.

C'è un modo più semplice? Esiste qualcosa come questo?

var last_visible_cells = $(table).find("tr").lastMatching("td:visible"); 
+0

che prima non è anche la sintassi valida. – Mathletics

+0

Grazie. La sintassi è stata corretta. –

risposta

20

Si può fare:

$('table tr').find('td:visible:last').addClass('last-visible'); 

Vedere un (jQuery 1.2+ compatibile) full example

+0

Grazie! Questo è esattamente quello che stavo cercando. –

0

si vuole prendere tutto il TDs e filtrare solo per quelli che non hanno un elemento visibile accanto ad essa.

Dang, funziona solo se non ci sono invisibili nel mezzo della riga.

+0

Se un gruppo di tag si alterna in visibilità (ad esempio 0101010), selezionando "tutti i tag visibili senza un tag seguente visibile" si selezionano tutti i tag visibili, anziché solo l'ultimo. Invece, usa nextUntil(). http://api.jquery.com/nextUntil/ – ChessWhiz

+0

@ChessWhiz sì, l'ho capito. – Mathletics

0

Sulla base della risposta da Mathletics, ma utilizzando nextUntil(). Questo trova ogni tag visibile che non ha un tag visibile seguente.

$('table tr').children('td').filter(function() { 
    return $(this).is(':visible') && $(this).nextUntil(':visible').length === 0; 
}) 
2

per ottenere ogni ultimo visibile è possibile fare qualcosa di simile

$('table tr').each(function(){ 
    console.log($(this).find('td:visible:last')) 
}) 
Problemi correlati