Ниже, как мне выбрать элементы, содержащие класс my_class
в элементе с id = "my_id"
?
Обратите внимание, что у элемента также может быть другой класс, который я не выбираю.
<div id = "my_id">
<span class = "my_class hidden">hi</span>
<span class = "my_class">hello</span>
</div>
пытался
$("#my_id [class*=my_class ]")
$("#my_id .my_class:first")
Просто используйте простой селектор классов.
$('#my_id .my_class')
Неважно, есть ли у элемента другие классы. У него есть класс .my_class , и он находится где-то внутри #my_id , поэтому он будет соответствовать этому селектору.
Что касается производительности
Согласно документации по производительности селектора jQuery , быстрее использовать два селектора отдельно, например:
$('#my_id').find('.my_class')
Вот соответствующая часть документации:
Выбор только по идентификатору или только по классу (среди прочего) вызывает функции, предоставляемые браузером, например,
document.getElementById()
которые довольно быстрые, тогда как использование дочернего селектора вызывает упомянутый механизм Sizzle, который, хотя и быстрый, но медленнее, чем предлагаемая альтернатива.источник
Всегда используйте
//Super Fast $('#my_id').find('.my_class');
вместо того
// Fast: $('#my_id .my_class');
Взгляните на правила производительности JQuery .
Также в JQuery Doc
источник
Я думаю, что вы просите выбрать только
<span class = "my_class">hello</span>
этот элемент, у вас есть это, если я правильно понимаю ваш вопрос, это ответ,$("#my_id [class='my_class']").addClass('test');
DEMO
источник
$("#my_id .my_class")
- более короткий эквивалент; в этом случае вы ничего не получите от использования селектора атрибутов.Также
$( "#container" ).find( "div.robotarm" );
равно:
$( "div.robotarm", "#container" )
источник