2010-03-08 5 views
41

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

Мне не нужен element1.isChildOf('selector'), это легко.
Мне нужно element1.isChildOf(element2)

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

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

+0

Если потомок что вы имеете в виду, пожалуйста, измените вопрос уточнения. – cletus

+0

Это должно быть защищено! – rafaelcastrocouto

ответ

71

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

element2.has(element1).length > 0 
+1

'has()' проверяет работу, если что-то является потомком **, а не дочерним по названию. – cletus

+0

Вы правы. Пример 'find()' в вопросе ввел меня в заблуждение. Уточнено. –

+0

Извините, потомок - это то, что мне нужно. Я попробую это сейчас. Cheers – Jake

7

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

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

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

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

Решение' .parents() 'кажется наиболее эффективным – bobobobo

6

по Jquery 1.6, вы можете определить, является ли объект JQuery является потомком другого объекта JQuery таким образом:

element2.is(element1.children()); 

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

1

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

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

Вот working example

1

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

$(element1).parents(element2).length 

таким образом это не ОК, если родитель имеет больше детей (let say they are input's):

$(element2).children(element1).length 
Смежные вопросы