Выбор jQuery: перемещение вверх, затем назад вниз - PullRequest
6 голосов
/ 27 мая 2009

Я борюсь с тем, как выбрать определенный элемент с помощью jQuery. Условия, изложенные здесь:

  • В соответствующем пункте моей функции this ссылается на span.
  • То, что span может быть ребенком, внуком или пра-внуком, но где-то в иерархии оно содержится в td.
  • Я бы хотел выбрать последний span внутри td.
  • span может быть this или другим span.
  • Выбираемые теги span являются прямым потомком содержащего td, поэтому last-child работоспособен. Однако для будущей гибкости предпочтение отдается решению, которое не предполагает, что это прямой дочерний элемент.

Пока что я использую это, чтобы выбрать правильный родительский элемент:

$(this).parents('td')

Я не знаю, как пройти назад по дереву DOM, чтобы получить окончательный span внутри выбранного td. Спасибо!

Редактировать

Согласно моим комментариям ниже, было бы также неплохо выбрать из span или div, в зависимости от того, что является последним.

Ответы [ 3 ]

13 голосов
/ 27 мая 2009
$(this).parents('td').children('span:last');

должен сделать трюк.

Редактировать

Я не заметил вашего желания иметь дело не только с непосредственными детьми. Если вы хотите, чтобы все потомки, то вы бы использовали

$(this).parents('td').find('span:last')

Я предполагал, что span всегда будет потомком td.

Окончательное редактирование

Ради потомков (и чтобы людям было легче найти этот ответ в будущем), поскольку этот ответ уже был принят, Бен предложил в своем ответе более элегантное решение, которое я собираюсь поставить здесь:

$(this).closest('td').find('div,span').filter(':last')

Как сказал Бен, вы должны использовать JQuery 1.3 для closest() для работы. Хорошая работа! : -)

5 голосов
/ 27 мая 2009

Я предпочитаю использовать ближайший в этом случае вместо родителей . Вам не нужно беспокоиться о наличии в родословной двух или более элементов td.

$(this).closest('td').children("span:last")
4 голосов
/ 27 мая 2009

Функция, которую вы ищете: find (expr) , которая ищет все узлы-потомки:

$(this).closest('td').find('span:last')

Редактировать: Для выбора последнего div или span:

$(this).closest('td').find('div,span').filter(':last')

Редактировать 2: Марк замечательно подходит для использования closest () вместо родителей () , но имейте в виду, что для этого вам нужно использовать jQuery 1.3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...