2016-05-21 4 views
0

Когда я ищу детей элемента, я использую следующие строки.Что равнозначно parent() при поиске любого предка

var myself = $(donkey); 
var myProblems = myself.children("*"); 
var notMyProblems = myself.find("*"); 

Однако, когда идет в противоположном направлении, можно использовать строку ниже, но я не нашел рекуррентную эквивалентную найти метод. Разве нет такой вещи?

var myself = $(donkey); 
var problemCreator = myself.parent(); 

В качестве примера, я хотел бы найти элемент таблицы, которая содержит строку, которая содержит делитель, который содержит интервал, который содержит кнопку, которая была нажата. Я могу сделать что-то подобное.

var clickaroo = $(event.target); 
var holder = clickaroo.parent().parent().parent().parent().parent(); 

Однако, это выглядит некрасиво и хрупкая, в случае, если кнопка вложена в неожиданных или непредвиденных дополнительных DIV или диапазоне. Я бы хотел использовать что-то вроде этого.

var clickaroo = $(event.target); 
var holder = clickaroo.superParent("table"); 

Я искал его, но получил наду. Я использую неправильные ключевые слова или нет такой функции?

+0

Я думаю, что вы хотите ближе: https://api.jquery.com/closest/ – chiliNUT

+0

Это точно ** **, что я искал. Неповторимое имя, на мой взгляд. Вам нужно будет опубликовать его как ответ, чтобы я мог принять его в качестве ответа. –

ответ

2

Метод, который вы ищете, - ближайший().

Если вы пытаетесь использовать элементы класса findMe, вы можете использовать следующие пять методов.

var self = $("#myMyselfAndI"); 
var oneLevelDown = self.children(".findMe"); 
var anyLevelDown = self.find(".findMe"); 
var oneLevelUp = self.parent(); 
var anyLevelUp = self.closest(".findMe"); 
var allUppwards = self.parents(); 
1

Если вы хотите выполнить поиск вверх в DOM, есть несколько вариантов. Если вы используете .parent(), он будет искать непосредственного родителя узла, но если вы используете parents(selector), поиск будет пересекать дерево вверх, возвращая все совпадения. Таким образом, вместо того, чтобы find вы можете сделать это

var myself = $(donkey); 
var parents = myself.parents(); 
+0

Вы правы. Однако при переходе ** вверх ** всегда создается один родительский элемент на уровень (именно один элемент должен быть предком текущего). В большинстве случаев, которые у меня были, мне нужно найти ** первое ** появление предка, которое удовлетворяет условию, поэтому * ближайший() * кажется еще лучшей альтернативой. Тем не менее, ваш ответ верен - обратите внимание на другой ответ. –

+0

@KonradViltersten yes Я пропустил это, потому что оба метода, которые вы использовали в своем сообщении ('children' и' find'), ведут себя именно таким образом. Возвращение всех матчей не только одного –