2012-01-11 4 views
3

У меня возникла проблема с выбором определенного элемента li в неупорядоченном списке. Хотя это не серьезная проблема, и я могу найти способ обойти ее, мне бы очень хотелось узнать, почему она не работает.jQuery selector not logical

Мой HTML:

<div id="myList"> 
    <ul> 
     <li>something 1</li> 
     <li>something 2</li> 
     <li>something 3</li> 
     <li>something 4 
      <ul> 
       <li>sub something 1</li> 
       <li>sub something 2</li> 
       <li>sub something 3</li> 
      </ul> 
     </li> 
    </ul> 
</div> 

Моя проблема заключается в следующем:

$('#myList ul:first li:first').addClass('cool') 

Это добавляет класс к "что-то 1" Ли тега. Все хорошо и хорошо. Но:

$('#myList ul:first li:last').addClass('cool') 

Вместо добавления класс «что-то 4» Ли тег, он добавляет его к «югу-то 3» Ли тегов.

Почему?

ответ

6

Вы выбираете все li-теги по дереву.

Вы можете попробовать это:

$('#myList ul:first>li:last').addClass('cool') 

Таким образом, вы только выбрать прямые дочерние узлы предыдущего узла.

+0

Ого. Я вижу свою ошибку. Какой манекен. Спасибо что подметил это. –

+0

NP, Вот почему мы здесь - учиться на ошибках, не так ли? Добро пожаловать в stackoverflow btw :) – bardiir

3

li:last обрабатывается слева направо. Сначала выбираются все элементы li, которые являются потомками ul. Поскольку вы используете descendant selector, а не дочерний селектор, этот включает в себя все элементы «sub» li. :last затем выбирает последний из них для отображения в документе, который равен sub something 3.

Вы должны использовать вместо child selector:

$('#myList ul:first > li:last').addClass('cool') 
+0

D'oh. Благодарю. :) –