Тестирование объектов на отношения предок / потомок в JavaScript или Jquery - PullRequest
17 голосов
/ 13 ноября 2008

Я пытаюсь найти многократно используемую функцию JS или jQuery, которая позволила бы мне проверить, является ли один объект потомком DOM другого.

Я видел модель тестирования для

$b.parents('nodename').length>0

Это замечательно, когда вам нужно только проверить, является ли элемент дочерним по отношению к какому-либо узлу с таким именем.

А как насчет конкретного узла? Вы не можете проверить

$b.parents($a).length>0

Поскольку родители jQuery принимают выражение имени узла в качестве аргумента для фильтрации.

В качестве небольшого фона я пытаюсь проверить, является ли цель события щелчка на документе дочерним объектом определенного объекта. Например, если event.target является дочерним элементом $ b, верните true, иначе верните false. Но эта функция может иметь другие последствия позже.

Спасибо!

Ответы [ 3 ]

22 голосов
/ 27 ноября 2012
a.contains(b)

Это чистое решение JavaScript, использующее Node.contains . Функция включительно, a.contains(a) оценивается как true.

В IE9 есть крайний случай: если b является текстовым узлом, contains всегда будет возвращать false.

13 голосов
/ 13 ноября 2008

В Предки jQuery, использующие объекты jQuery Я предложил

if ($(obj1).parents().index($(obj2)) >= 0) {
    // obj1 is a descendant of obj2
}
2 голосов
/ 13 ноября 2008

Попробуйте это:

$('#foo').filter(function(){

   return $(this).parent().is('#foo-parent');

});

Итак, здесь мы выбираем все элементы foo, а затем фильтруем только те элементы, у которых foo-parent является их непосредственным родителем.

Если вы ищете, соответствует ли кто-либо из предков текущего объекта правилу, тогда, я думаю, это должно быть:

$('#foo').filter(function(){

   return $(this).parents().is('#foo-parent');

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