Селектор jQuery нелогичен

3 Strontium_99 [2012-01-11 12:38:00]

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

Мой 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')

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

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

Вместо добавления класса в тег "something 4" li он добавляет его в тег "sub something 3" li.

Почему?

jquery jquery-selectors


2 ответа


6 Решение bardiir [2012-01-11 12:40:00]

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

Возможно, вы захотите попробовать следующее:

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

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


3 lonesomeday [2012-01-11 12:43:00]

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

Вместо этого используйте дочерний селектор:

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