2008-11-13 13 views
16

Próbuję wymyślić funkcję JS lub jQuery wielokrotnego użytku, która pozwoliłaby mi przetestować, czy jeden obiekt jest potomkiem DOM innego.Testowanie obiektów dla relacji przodka/potomka w JavaScript lub Jquery

Widziałem model testowania

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

co jest fantastyczne kiedy trzeba tylko sprawdzić, czy element jest dzieckiem dowolnego węzła o tej samej nazwie.

Ale co z określonym węzłem? Nie można przetestować, ponieważ rodzice jQuery pobierają wyrażenie węzłów jako argument do przefiltro- wania.

Jako małe tło próbuję sprawdzić, czy cel zdarzenia click dokumentu jest dzieckiem określonego obiektu. Na przykład, jeśli event.target jest dzieckiem $ b, zwróć true, w przeciwnym razie zwróć false. Ale ta funkcja może mieć później inne implikacje.

Dzięki!

Odpowiedz

12

W jQuery ancestors using jQuery objects Zasugerowałem

if ($(obj1).parents().index($(obj2)) >= 0) { 
    // obj1 is a descendant of obj2 
} 
+1

Idealny. Ten rzeczywiście umożliwia przekazanie obiektu zamiast selektora, który jest fantastyczny. Dzięki jeszcze raz! – dreisch

+4

Można przekazać nieopakowany element DOM do indeksu, więc można to uprościć, jeśli ($ (obj1) .parents(). Index (obj2)> = 0) –

+0

Jest teraz $ .contains, jeśli martwisz się o Node.contains. –

2

Spróbuj:

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

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

}); 

Więc tutaj mamy do wyboru wszystkie elementy foo, a następnie filtrowanie tylko te elementy, które mają bla-rodzica co ich bezpośrednim rodzicem.

Jeśli szukasz, aby znaleźć, jeśli którykolwiek z przodków obecnego obiektu zgodne z zasadą, to chyba powinno być:

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

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

}); 
21
a.contains(b) 

To jest czyste rozwiązanie JavaScript z użyciem Node.contains. Ta funkcja jest włączona, a.contains(a) ma wartość true.

W IE9 występuje przypadek krawędzi: jeśli b jest węzłem tekstowym, zawsze zostanie zwrócony fałsz contains.

+5

To jest świetne! Mi to pasuje. Zawsze wolę czysty JS od frameworków. – Firas

Powiązane problemy