2012-01-03 5 views
1

Я пытаюсь добавить класс в таблицу..addClass на основе span, завернутого в две таблицы

<table>><tbody>><tr>><td>><table>><tbody>><tr>><td>><span class="subcategory">

Поэтому в основном я хотел бы добавить класс к исходной таблице, основанной на span.subcategory. у меня есть это:

$('span.subcategory').parent().closest("table").addClass('myClass'); 

Но это идет только во второй таблице.

+0

$ («span.subcategory»). Ближайший («таблица»). Ближайший («таблица»). AddClass («myClass»); =>, который будет делать трюк, но это далеко не оптимизированный код – CedX

+1

@ CédricBelin Я не думаю, что это сработает. 'closeest' не идет вверх по дереву DOM, если сам элемент удовлетворяет селектору (так что он останется во внутренней таблице даже после второго« ближайшего »вызова). –

+0

@Sime Vidas: Я думаю, ты прав ... ой! – CedX

ответ

2
$('span.subcategory').parents('table:last') 
+0

Это предполагает, что больше не будет таблиц дерева? – esycat

+0

Больше нет ... – henryaaron

+0

Если вы уверены, что никогда не будет ... :-) – esycat

0

ли

$('span.subcategory').closest('table') 
    .parent().closest('table') 
    .addClass('myClass');` 

работу?

В качестве альтернативы:

$('table:has(table:has(span.subcategory))').addClass('myClass'); 
+0

Да, но это добавляет класс в оба родителя 'table's, я только пытаюсь добавить его в верхнюю родительскую таблицу. – henryaaron

+0

Я считаю, что добавляет класс к элементам TABLE. –

+0

Вы, парни, правы. Я не понял этот вопрос. Исправлена. – Meligy

1

Чтобы добраться до внешней таблицы:

$('span.subcategory').parents('table').eq(1).addClass('myClass'); 

JS Fiddle demo

Или, возможно:

$('span.subcategory').parents('table:has("table span.subcategory"):first').addClass('myClass'); 

JS Fiddle demo

+0

Не работает ... – henryaaron

+1

Связанные демоверсии предполагают, что они оба делают ... –

+0

Второй из них действительно работал, но ответ Элайджи менее сложный ... +1 – henryaaron

1
$('span.subcategory').closest('table').parent().closest('table').addClass('myClass'); 

Я считаю, что это должно быть более эффективным, так как он будет пересекать DOM дерево только на второй (внешней) таблицы.