Тест jQuery, если элемент1 является потомком элемента2

Кто-нибудь знает хороший способ проверить, является ли один элемент, хранящийся в var, потомком другого, также хранящегося в var?

Мне не нужно element1.isChildOf('selector'), это просто.
Мне нужно element1.isChildOf(element2)

element2.find(element1).size() > 0 Кажется, что не работает.

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

Ответ 1

Если вы используете 1.4 и ищете потомка, а не ребенка, как следует из вашего примера find(), там has():

element2.has(element1).length > 0

Ответ 2

Вы можете использовать index() для этого. Он вернет -1, если элемент не находится в наборе. Предполагая, что element1 и element2 являются элементами DOM, а не объектами jQuery:

if ($(element2).children().index(element1) != -1) {
  // it a child
}

Для полноты, чтобы проверить, является ли что-то потомком, а не только ребенком, он также может быть использован для этого:

if ($(element1).parents().index(element2) != -1) {
  // element1 is a descendant of element2
}

Ответ 3

По состоянию на JQuery 1.6 вы можете определить, является ли объект jquery дочерним по отношению к другому объекту jquery таким образом:

element2.is(element1.children());

Также примечательно, поскольку is() теперь принимает несколько разных аргументов (первый аргумент может быть функцией, селектором jQuery или элементом DOM), вы не можете думать об этом просто как "есть", а скорее о том, находится или находится в ".

Ответ 4

Я знаю, что эта ветка устарела, но это также работает, если вы хотите проверить вверх не вниз:

function isElementChildOf(childElement, parentElement) {
    return 0 !== $(childElement).parents(parentElement).length;
}

Вот рабочий пример

Ответ 5

Это true, если element1 является дочерним элементом элемента2, другими словами элемент element1 имеет родительский элемент, то есть element2

$(element1).parents(element2).length 

таким образом он не в порядке, если у родителя больше детей (пусть говорят, что они input '):

$(element2).children(element1).length