2013-06-27 6 views
0

Я пытаюсь выбрать предыдущую ячейку таблицы непустой ячейки таблицы.JQuery - Как выбрать предыдущую ячейку таблицы не пустой ячейки таблицы

У меня есть следующий код.

ЭТО РАБОТАЕТ (Выделить все пустые ячейки)

$("td.brand:empty").css('background-color', 'red'); 

ЭТО РАБОТАЕТ (Выделить все не пустые ячейки)

$("td.brand:not(:empty)").css('background-color', 'green'); 

ЭТО НЕ РАБОТАЕТ (Выделите предыдущую ячейку непустой ячейки)

$("td.brand:not(:empty)").prev("td.brand").css('background-color', 'yellow'); 

Вся помощь приветствуется.

Благодаря

+0

Можете ли вы предоставить нерабочий пример jsfiddle? Похоже, он должен работать. – Jon

+0

он должен работать, пожалуйста, помните, что 'prev()' будет работать только на соседних братьях и сестрах, а не на 'td' на других строках. –

+0

« Предыдущая ячейка »означает, что в этом случае? Один слева или один наверху? –

ответ

0

Если вам нужно абстрагировать td с из их рядов вы можете сгруппировать их в объекте и работать с индексом:

var $tds = $('td.brand'); 
$tds.filter(":not(:empty)").each(function() { 
    var i = $tds.index(this); 
    if (i) // prevents wrapping to last 
     $tds.eq(i-1).addClass('on'); 
}); 

http://jsfiddle.net/L3L6a/3/

+0

Это выглядит хорошо. Могу ли я быть настолько смелым, чтобы спросить, как вы могли бы предотвратить использование предыдущего класса td, если он действительно содержит запись. Иногда в бренде есть только одна запись, и в этом случае это выглядит странно. – Johnny

+0

что-то вроде этого? http://jsfiddle.net/bUgzs/1/ –

0

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

Ваш код правильно, вы можете проверить его здесь: JS Fiddle

Этот код:

$("td.brand:empty").css('background-color', 'red'); 
$("td.brand:not(:empty)").css('background-color', 'green'); 
$("td.brand:not(:empty)").prev("td.brand").css('background-color', 'yellow'); 

Работы для этого:

<table> 
    <tr> 
     <td class="brand">sdfsdf</td> 
     <td class="brand"></td> 
     <td class="brand">sdfsdfs</td> 
    </tr> 
    <tr> 
     <td class="brand"></td> 
     <td class="brand">ssdfsdf</td> 
     <td class="brand"></td> 
    </tr> 
</table> 
0

В примере, который вы указали в комментарии, нет предыдущих строк с пустым td.brand, поэтому я предполагаю, что это может быть то, что вам нужно, на основе редактирования вашего примера.

$("tr:has(td.brand:not(:empty))").prev().find("td.brand").css('background-color', 'yellow'); 

Это находит все строки, которые имеют непустое td.brand, затем выбирает предыдущую строку и затем td.brand этой строки.

Вот скрипка: http://jsfiddle.net/jRCbd/1/ (Обновление вашей скрипки)

+0

Это именно то, что я хочу, но по какой-то причине он не работает на моем сайте, но работает на скрипке. Любые идеи о том, почему это может быть? – Johnny

+0

Если то, что вы предоставили в качестве примера, такое же, как и ваше фактическое решение, я не могу сказать, что случилось, извините .. –

Смежные вопросы