Ответ 1
Если вы используете 1.4 и ищете потомка, а не ребенка, как следует из вашего примера find()
, там has()
:
element2.has(element1).length > 0
Кто-нибудь знает хороший способ проверить, является ли один элемент, хранящийся в var, потомком другого, также хранящегося в var?
Мне не нужно element1.isChildOf('selector')
, это просто.
Мне нужно element1.isChildOf(element2)
element2.find(element1).size() > 0
Кажется, что не работает.
Я не хочу писать плагин для использования .each
для проверки каждого дочернего элемента, если я могу его избежать.
Если вы используете 1.4 и ищете потомка, а не ребенка, как следует из вашего примера find()
, там has()
:
element2.has(element1).length > 0
Вы можете использовать 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
}
По состоянию на JQuery 1.6 вы можете определить, является ли объект jquery дочерним по отношению к другому объекту jquery таким образом:
element2.is(element1.children());
Также примечательно, поскольку is()
теперь принимает несколько разных аргументов (первый аргумент может быть функцией, селектором jQuery или элементом DOM), вы не можете думать об этом просто как "есть", а скорее о том, находится или находится в ".
Я знаю, что эта ветка устарела, но это также работает, если вы хотите проверить вверх не вниз:
function isElementChildOf(childElement, parentElement) {
return 0 !== $(childElement).parents(parentElement).length;
}
Вот рабочий пример
Это true
, если element1 является дочерним элементом элемента2, другими словами элемент element1 имеет родительский элемент, то есть element2
$(element1).parents(element2).length
таким образом он не в порядке, если у родителя больше детей (пусть говорят, что они input
'):
$(element2).children(element1).length