Jak mogę wybrać przedmiot z klasą w DIV?


142

Mam następujący HTML:

<div id="mydiv">
  <div class="myclass"></div>
</div>

Chcę móc używać selektora, który wybiera wnętrze div, ale jest specyficzny dla mydivkontenera. Jak mogę to osiągnąć dzięki jQuery?

Odpowiedzi:


285

Próbować:

$('#mydiv').find('.myclass');

Demo JS Fiddle .

Lub:

$('.myclass','#mydiv');

Demo JS Fiddle .

Lub:

$('#mydiv .myclass');

Demo JS Fiddle .

Bibliografia:


Dobrze się nauczyć z find()dokumentacji:

Metody .find () i .children () są podobne, z tą różnicą, że ta druga przemieszcza się tylko o jeden poziom w dół drzewa DOM.


2
drugie dwa nie będą działać, ale znajdź jest OK. Drugie dwa wybiorą każdą klasę = myclass i każdy id = mydiv), jak myślę.
— czupe

2
@czupe: nie, podczas gdy podejście z selektorem kontekstu jest napisane inaczej jQuery implementuje wewnętrznie to samo $('#mydiv').find('.myclass');podejście, które zostało użyte w pierwszym fragmencie kodu. Nawiasem mówiąc: „... wybierz wszystko id=mydiv”? Podane na stronie powinno być użyte tylko razid (znak id musi być unikalny w obrębie dokumentu ).
— David mówi, że przywróć Monikę

@DavidThomas Cóż, właśnie próbowałem $ ('# mydiv .myclass'); a to zakończyło się wybraniem wszystkich elementów div, które mają klasę mydiv, a nie tylko elementów div w mydiv.
— user3281466,

@ user3281466: naprawdę? Wydaje się to mało prawdopodobne, czy możesz odtworzyć swój problem ?
— David mówi, że przywróć Monice

jak sprawdzić, czy coś jest w div, a następnie wstawić: not ()
— SuperUberDuper

20

Spróbuj tego

$("#mydiv div.myclass")

Lub jeśli nie obchodzi cię, czy to jest div(czy zawsze będzie a div), możesz uprościć do $ ("# mydiv .myclass").
— Michael Mior

@Michael - Tak, możemy po prostu powiedzieć .mycalss, ale jeśli wiemy, że jest to element div, div.myclass przyspieszy wyszukiwanie.
— ShankarSangoli

@Shankar, najprawdopodobniej nie przyspieszy, a raczej zwolni. zakładając, że jquery używa sizzle, a nie natywnego document.queryselectorall, prawdopodobnie będzie szukał w ten sam sposób iw twoim przypadku przeprowadzi dodatkowe sprawdzenie. Możliwe, że natywne implementacje robią to samo.
— davin

Niektóre szybkie testy, które przeprowadziłem, sugerują, że jest to zależne od przeglądarki. Wydawał się nieznacznie szybszy w Chrome i nieznacznie wolniejszy w FF. Tak czy inaczej, chyba że uruchamiasz ten selektor wiele razy lub na dużej liczbie elementów, różnica jest prawdopodobnie nieistotna. Zobacz tutaj mój surowy (i prawdopodobnie błędny) test.
— Michael Mior,

@Michael - Jeśli określimy zmienną wraz z nazwą klasy, to najpierw użyjemy getElementsByTagName, a następnie wyszukamy nazwę klasy, która jest zdecydowanie szybsza i nadal używa natywnej metody do sortowania pierwszego poziomu. Zawsze jest to pomijalne, jeśli nie ma wielu elementów do wyboru.
— ShankarSangoli

11

Zrobisz to w ten sam sposób, w jaki zastosowałbyś selektor CSS. Na przykład możesz to zrobić

$("#mydiv > .myclass")

lub

$("#mydiv .myclass")

Ostatni będzie pasował do każdej myklasy w myDiv, w tym do myklasy w myklasie.


6

Jeśli chcesz wybrać każdy element, który ma atrybut klasy „myclass”, użyj

$('#mydiv .myclass');

Jeśli chcesz wybrać tylko elementy div, które mają atrybut klasy „myclass”, użyj

$("div#mydiv div.myclass");

więcej informacji o selektorach jquery zapoznaj się z tymi artykułami


1

spróbuj tego zamiast tego $(".video-divs.focused"). Działa to, jeśli szukasz elementów div wideo, które są skoncentrowane.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.