jquery .children () из .get () - PullRequest
       17

jquery .children () из .get ()

3 голосов
/ 26 июля 2011

Пример:

<ul>
  <li>
    <a></a>
  </li>
  <li>
    <a></a>
  </li>
</ul>

Я могу использовать $('ul').children('li').get(0);, чтобы получить элемент списка.Как я могу использовать .children('a') для обхода дерева?

Я пробовал что-то вроде $('ul').children('li').get(0).children('a');, но это не работает.


Для дальнейшего использования:

  1. Я буду делать с li другие вещи, кроме перехода на a, поэтому я пытаюсь использовать .children().
  2. Индекс будет динамичным и не всегда0.

Именно поэтому .eq () является предпочтительным ответом.Теперь я могу сделать что-то вроде:

_load = function(index) {
  image_get = thumbs.children('li').eq(index);

  [...]

  $(function() {
    var img = $(new Image());
    img
      .load(function() {
        [...]
      }
      .attr('src', image_get.children('a').attr('href'));
  });
}

_load(0);

^^^ WIP.Код не завершен.

Ответы [ 3 ]

11 голосов
/ 26 июля 2011

.get() возвращает элемент DOM. Вы можете обернуть его обратно в объект jQuery, например:

$($('ul').children('li').get(0)).children('a');

Но Я думаю, что вы действительно хотите, это .eq() вместо .get():

$('ul').children('li').eq(0).children('a');

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

Как Рид любезно указал в комментарии ниже,

$('ul').children('li').eq(0).children('a');

семантически эквивалентно более лаконичному:

$('ul > li:first-child > a');

, что делает то же самое, что и выше, с одним селектором.

4 голосов
/ 26 июля 2011

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

$('ul li:first a')

Получит объект jQuery для первого тега <a> в вашем примере HTML.

Логика выбора работает следующим образом: найдите все теги ul, найдите первый тег li в каждом, а затем получите все теги a в каждом из первых тегов li. Результатом является выбор jQuery, к которому затем можно применить различные операции.

Демо здесь: http://jsfiddle.net/jfriend00/5qZP5/

1 голос
/ 26 июля 2011

Вы можете сделать это

$('ul li a:first');

http://jsfiddle.net/jasongennaro/yCAT6/

$('ul li a'); возвращает все a s в этом списке.

:first Фильтры только для первого.

...