2011-12-13 9 views
10

Хотелось бы увидеть последние видныtd в каждом tr в таблице.Выбрать каждый видимый последний ребенок в jQuery

Это не работает, потому что он пытается выбрать последний потомок если видно:

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

До сих пор самый простой метод я думал, чтобы использовать .each к петле через tr элементов и добавьте каждый из последних видимых td s в новый список селекторов.

Есть ли более простой способ? Есть ли что-нибудь подобное?

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

что первые один также не является допустимым синтаксисом. – Mathletics

+0

Спасибо. Синтаксис исправлен. –

ответ

20

Вы можете сделать это:

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

См full example (JQuery 1.2+ совместимый)

+0

Спасибо! Это именно то, что я искал. –

0

Вы хотите, чтобы захватить все TDs и фильтровать только те, которые не имеют видимого элемента рядом с ним.

Dang, который работает только в том случае, если в середине строки нет невидимых.

+0

Если группа меток чередуется в видимости (например, 0101010), выбор «всех видимых тегов без видимого следующего тега» будет выбирать все видимые теги, а не только последние. Вместо этого используйте nextUntil(). http://api.jquery.com/nextUntil/ – ChessWhiz

+0

@ChessWhiz да, я получил это. – Mathletics

0

На основании ответа от Mathletics, но с использованием nextUntil(). Это находит каждый видимый тег, у которого нет следующего видимого тега.

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

, чтобы получить каждое последнее видимые их вы можете сделать что-то вроде

$('table tr').each(function(){ 
    console.log($(this).find('td:visible:last')) 
}) 
Смежные вопросы