2013-05-15 8 views
5

Mam istniejącą kolekcję elementów, które chcę zmienić, jeśli pasują do danego selektora. Chcę zrobić to samo dla potomków tych przedmiotów (rekursywnie). To wydaje się być funkcją jQuery(selector [, context ]). Jednak wynikowy zestaw nie zawiera elementów nadrzędnych. Też chcę je zapytać. Czy można to zrobić za pomocą jednego polecenia?Jak uwzględnić elementy kontekstu w przestrzeni wyszukiwania przy użyciu jQuery (selektor [, kontekst])

np

var els = $('<div foo="bar">') 
$("[foo]", els); // finds nothing 
els.filter("[foo]"); // finds div 

Ale filtr nie szukać potomków, więc

var els = $('<div foo="bar"><span foo="foobar"></div>') 
$("[foo]", els); // finds span 
els.filter("[foo]"); // finds div 

Jaki jest najlepszy sposób, aby znaleźć zarówno rozpiętość i div? Używaj obu poleceń? Czy istnieje jedno polecenie linii, aby je znaleźć? W każdym razie lepiej?

var els = $('<div foo="bar"><span foo="foobar"></div>') 
var selection = $("[foo]", els); // finds inner elements 
selection = selection.add(els.filter("[foo]")); // then adds on parents that match the selector 
+0

'$ ("[Foo]", Els) .add (ELS)', jest droga, elementy przekazane jako kontekst nie są częścią zaznaczenia. – adeneo

+0

Nie chcę dodawać wszystkich els, tylko elementy w els, które pasują do selektora "[foo]". – AlexMA

+0

@adeneo i musisz upewnić się, że els pasuje do selektora. Następnie staje się wysłanym przykładem. –

Odpowiedz

2

kontekst dla doprowadzania elementów lub zbiór elementów, wygląd ciągu, czyli potomków tych elementów. Nie filtruje jak .filter, jest bardziej podobny do .find.

Jeśli chcesz zarówno, będziesz musiał użyć obu:

$("[foo]", els).add(els.filter("[foo]")); 

lub użyć elementu nadrzędnego.

$("[foo]", $("<div>").html(els)); 

tak, nie ma lepszego sposobu.

Druga metoda polega na tym, jak działa metoda .load jQuery, ale nie uważam tego za lepszą.

https://github.com/jquery/jquery/blob/1.9-stable/src/ajax.js#L176

+0

@AlexMA przepraszam, naciśnij przesyłaj zbyt wcześnie. –

+0

Podejrzewałem, że tak. Wydaje się, że byłoby trochę ładniej mieć opcję włączenia elementu kontekstu, aby wyszukiwanie było bardziej wydajne i wyglądało mniej funkowo, ale nie jest tak źle. – AlexMA

+0

I szczęśliwie wygląda na to, że nie ma duplikatów w przypadku, gdy kontekst jest podobny do $ ("*") (co byłoby głupie, ale nadal). – AlexMA

Powiązane problemy