Poniżej, w jaki sposób powinienem wybrać elementy, które zawierają klasę my_class
w elemencie z id = "my_id"
?
Zauważ, że element może mieć również inną klasę, której nie wybieram.
<div id = "my_id">
<span class = "my_class hidden">hi</span>
<span class = "my_class">hello</span>
</div>
próbował
$("#my_id [class*=my_class ]")
$("#my_id .my_class:first")
Po prostu użyj zwykłego selektora klas.
$('#my_id .my_class')
Nie ma znaczenia, czy element ma również inne klasy. Ma klasę .my_class i znajduje się gdzieś wewnątrz #my_id , więc będzie pasował do tego selektora.
Jeśli chodzi o wydajność
Zgodnie z dokumentacją dotyczącą wydajności selektora jQuery , szybsze jest użycie dwóch selektorów osobno, na przykład:
$('#my_id').find('.my_class')
Oto odpowiednia część dokumentacji:
Wybieranie według identyfikatora lub samej klasy (między innymi) wywołuje funkcje dostarczane przez przeglądarkę, takie jak,
document.getElementById()
które są dość szybkie, podczas gdy użycie selektora zstępującego wywołuje silnik Sizzle, który, chociaż szybki, jest wolniejszy niż sugerowana alternatywa.źródło
Zawsze używaj
//Super Fast $('#my_id').find('.my_class');
zamiast
// Fast: $('#my_id .my_class');
Przyjrzyj się regułom wydajności JQuery .
Również w Jquery Doc
źródło
Myślę, że prosisz o wybranie tylko
<span class = "my_class">hello</span>
tego elementu, musisz to zrobić, jeśli dobrze rozumiem twoje pytanie, to jest odpowiedź,$("#my_id [class='my_class']").addClass('test');
DEMO
źródło
$("#my_id .my_class")
jest krótszym odpowiednikiem; w tym przypadku nic nie zyskujesz dzięki użyciu selektora atrybutów.Równa się również
$( "#container" ).find( "div.robotarm" );
:
$( "div.robotarm", "#container" )
źródło