У меня есть таблица с древовидной структурой (супер- и подкатегории). Когда пользователь щелкает суперкатегорию, свойство display дочерних элементов переключается.
Теперь я хочу добавить чередующийся цвет фона для каждой второй строки таблицы - но, конечно, принимая во внимание только те, которые в настоящее время видны. Ниже приведен упрощенный пример структуры:
<table>
<tr data-level="0"><td>Super 1</td></tr>
<tr class="hide" data-level="1"><td>Sub 1</td></tr>
<tr data-level="0"><td>Super 2</td></tr>
<tr class="hide" data-level="1"><td>Sub 2</td></tr>
<tr class="hide" data-level="1"><td>Sub 3</td></tr>
<tr class="hide" data-level="1"><td>Sub 4</td></tr>
</table>
Когда пользователь нажимает на элемент «Super 2», классы «скрытия» удаляются из дочерних элементов.
Я пробовал несколько селекторов, например:
/* Ugly result (dosn't recognize that elements are hidden) */
tr:nth-child(2n)
{
background-color: grey;
}
/* Doesn't work at all */
tr:visible:nth-child(2n)
{
background-color: grey;
}
/* Not what I inteded to do */
tr:not(.hide):nth-child(2n)
{
background-color: grey;
}
Надеюсь, я понял, что хочу делать.
Возможно ли это с помощью CSS, или я должен написать сценарий JS, который пересчитывает четные и нечетные строки всякий раз, когда что-либо изменяется? Заранее благодарим за любые подсказки!
:visible
- это действительно нестандартный селектор, который присутствует в jQuery / Sizzle и, возможно, в паре других библиотек. - person BoltClock   schedule 11.03.2012