Как получить ближайший родительский узел с заданным текстовым узлом в jQuery? - PullRequest
1 голос
/ 21 мая 2010

Если у меня есть селектор для текстового узла в jQuery, как я могу получить родительский узел?

Ответы [ 4 ]

4 голосов
/ 21 мая 2010
$('selector_for_your_textnode').parent()

для объекта jQuery или

$('selector_for_your_textnode').parent()[0]

для обычного объекта DOM.

Вы также можете использовать .closest('element_you_want') для большей гибкости.

Как отмечает Клетус в комментариях, если вы хотите захватить фактический текстовый узел и работать оттуда вверх, все становится немного сложнее, чем ванильный селектор jQuery. Это можно сделать, но вы должны искать nodeType 3. Этот ответ может помочь с этой частью.

4 голосов
/ 21 мая 2010

Любой элемент или текстовый узел является Node, который имеет свойство parentNode. Для этого вам не нужен jQuery, но вы можете превратить родительский объект в объект jQuery:

$(textNode.parentNode)...
2 голосов
/ 21 мая 2010

jQuery предлагает несколько вариантов для этого. Самый простой из них:

$(selector).parent();

Это вернет непосредственный родительский узел выбранного элемента (или родительский элемент каждого элемента в наборе, если селектор соответствует более чем одному).

Следующая опция:

$(selector).parents();

Для каждого элемента в соответствующем наборе будет возвращено все родители (и дедушки, бабушки, дедушки и бабушки и т. Д.) Этого элемента, вплоть до корневого узла документа (<html> для документов HTML). Вы можете передать этот селектор, чтобы получить только совпадающие элементы, например,

$(selector).parents('div'); // only parents that are divs

Последний способ - использовать:

$(selector).closest(otherSelector);

Это немного отличается, потому что он вернет первый элемент, соответствующий второму селектору, начиная с вызывающего набора. Так что, если у меня есть это:

<div>
  <ul>
    <li>
      <p id="foo">foo</p>
    </li>
  </ul>
</div>

и я сделаю $('#foo').closest('p'), я вернусь к набору jQuery, содержащему p#foo. Если я вместо этого сделаю $('#foo').closest('ul'), я верну элемент <ul>, как и следовало ожидать.

1 голос
/ 21 мая 2010

Вы имеете в виду, как

$('.myselector').parent(); ?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...