Jquery,id 中类的选择器

下面,我应该如何选择元素中包含类 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 ]")
169890 次浏览

You can use the class selector along with descendant selector

$("#my_id .my_class")

Just use the plain ol' class selector.

$('#my_id .my_class')

It doesn't matter if the element also has other classes. It has the .my_class class, and it's somewhere inside #my_id, so it will match that selector.

Regarding performance

According to the jQuery selector performance documentation, it's faster to use the two selectors separately, like this:

$('#my_id').find('.my_class')

Here's the relevant part of the documentation:

ID-Based Selectors

// Fast:
$( "#container div.robotarm" );


// Super-fast:
$( "#container" ).find( "div.robotarm" );

The .find() approach is faster because the first selection is handled without going through the Sizzle selector engine – ID-only selections are handled using document.getElementById(), which is extremely fast because it is native to the browser.

Selecting by ID or by class alone (among other things) invokes browser-supplied functions like document.getElementById() which are quite rapid, whereas using a descendent selector invokes the Sizzle engine as mentioned which, although fast, is slower than the suggested alternative.

I think your asking to select only <span class = "my_class">hello</span> this element, You have do like this, If I am understand your question correctly this is the answer,

$("#my_id [class='my_class']").addClass('test');

DEMO

Always use

//Super Fast
$('#my_id').find('.my_class');

instead of

// Fast:
$('#my_id .my_class');

Have look at JQuery Performance Rules.

Also at Jquery Doc

Also $( "#container" ).find( "div.robotarm" );
is equal to: $( "div.robotarm", "#container" )

You can use find() :

$('#my_id').find('.my_class');

Or maybe:

$('#my_id').find('span');

Both methods will work for what you want