пятница, 9 сентября 2011 г.

jQuery. Особенности использования .parent(), .parents(), .closest(), .siblings()

Для того чтобы найти родительский элемент(ы) выбранного узла, можно пользоваться похожими методами: .parent(), .parents(), .closest(). Для поиска соседних узлов пользуются .siblings().

Рассмотрим различия между ними:

Первый метод .parent([selector]) -  находит родителя строго на один уровень вверх.
Пример: $(this).parent()

Для того чтобы получить родителя от родителя нужно применять цепочку вызовов (произвольной глубины): $(this).parent().parent()....

Второй метод .parents([selector])  - возвращает список всех родительских узлов, и,  может содержать селектор, для уточнения набора родителей. 
Пример: $(this).parents("li.test")

Третий метод .closest(selector, [context]) - возвращает первый ближайший родительский узел или же текущий узел - которые удовлетворяют условию в селекторе (селектор обязательный). Может принимать контекст для уточнения поиска (набор узлов заранее выбранных).
Основные отличия его от .parents():
    - может вернуть и текущий узел
    - обязательный селектор
   - возвращает только первый элемент который попал под условие, поиск ведется тоже вверх по дереву.
Пример: $(this).closest("li.test") или $(this).closest("li.test", itemsList)

Ну и наконец последний метод .siblings([selector]) - возвращает набор соседних узлов (тех, которые имеют того же родителя что и текущий), может принимать уточняющий селектор.
Пример: $("ul li#id1").siblings()

7 комментариев:

  1. В первых двух примерах вместо parent() использован parents()

    ОтветитьУдалить
  2. >не имеет параметров.
    .parent() можно использовать гибче, передавая в параметрах selector. $('div').parent('.yellow').css({'background-color':'#ff0'}).end().parent('.gray').css({'background-color':'#a9a'});

    >$(this).parent().parent()...
    или так - $(this).parent(2);

    ... а еще есть методы prev, prevAll,prevUntil и parentsUntil :)

    ОтветитьУдалить
  3. СПАСИБО!)) БОЛЬШОЕ))))

    ОтветитьУдалить
  4. Купите хомяка

    ОтветитьУдалить