2009-11-26 2 views
0

Я хочу добавить определенные классы на различные уровни заголовков навигационных веб-сайтов. Так что я буду иметь что-то, в конце концов, какПрименить функцию jQuery к одному элементу и * NOT * его потомкам

$('#navCol > ul > li > ul > li > ul').addClass('lvl2'); 
    // Each ‘li > ul’ past the first ‘ul’ indicates another sub-level. 

добавить lvl2 класс второго уровня и т.д. Сказав, что он не только применить указанный класс ко второму уровню, он также добавляет его другой ul под ним. Есть ли способ указать, что я хочу включить только элемент, а не его потомков.

+2

ли вы имеете в виду «он также добавляет его к другим ULS ** рядом с ** Это"? –

+1

Ваш селектор будет применяться только к третьей 'ul'. он никогда не будет добавлен к другим под ним. –

+0

Да, проблема была в том, что я использовал цикл for, и я забыл добавить '>' там где-то. –

ответ

3

Попробуйте что-то вроде

$('#navCol > ul > li > ul > li').children("ul").each(function() { 
    $(this).addClass('lvl2'); 
}); 

или если вы просто хотите, первый URL, попробовать что-то вроде

$('#navCol > ul > li > ul > li').children("ul:first").each(function() { 
    $(this).addClass('lvl2'); 
}); 
+0

Я думаю, что '.each' не нужно. Вы можете сократить оператор до только что использованного '.addClass', следуя вызовам' children ("ul") 'или' children ("ul: first") '. –

+2

О! Я понял, что я сделал не так. То, что я сказал в вопросе, действительно и работает. Я использовал цикл 'for' для циклического добавления' li> ul' несколько раз к '#navCol> ul', но я забыл дополнительные'> 'перед' li', поэтому он не работал. Ответ Криса также работает, но код, который я включил в вопрос, действителен и ведет себя правильно. –

+0

Я думаю, что ты прав. Я думаю, что jQuery будет автоматически итерации, когда он найдет несколько элементов. Хороший звонок! –

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