99

下面,我应该如何选择包含在元素中的类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 ]")
4

6 回答 6

167

您可以将类选择器后代选择器一起使用

$("#my_id .my_class")
于 2013-07-02T04:50:56.427 回答
52

只需使用普通的 ol' 类选择器。

$('#my_id .my_class')

元素是否还有其他类并不重要。它有.my_class类,它位于#my_id内部的某个地方,因此它将匹配该选择器。

关于性能

根据jQuery 选择器性能文档,分别使用两个选择器会更快,如下所示:

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

这是文档的相关部分:

基于 ID 的选择器

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

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

.find()方法更快,因为第一个选择是在不通过 Sizzle 选择器引擎的情况下处理的——只有 ID 的选择是使用 处理的document.getElementById(),这非常快,因为它是浏览器的本机。

单独按 ID按类选择(除其他外)会调用浏览器提供的函数document.getElementById(),这些函数非常快,而使用后代选择器会调用 Sizzle 引擎,尽管速度很快,但比建议的替代方法慢。

于 2013-07-02T04:51:31.353 回答
13

始终使用

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

代替

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

看看JQuery 性能规则

同样在Jquery Doc

于 2013-07-02T05:33:26.477 回答
2

$( "#container" ).find( "div.robotarm" );
等于:$( "div.robotarm", "#container" )

于 2018-08-07T14:39:50.043 回答
1

我认为您要求仅选择<span class = "my_class">hello</span>此元素,您已经这样做了,如果我正确理解您的问题,这就是答案,

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

DEMO

于 2013-07-02T04:55:55.003 回答
0

您可以使用 find() :

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

或者可能:

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

两种方法都会表达你想要的

于 2021-01-23T18:06:32.637 回答