在下面,我应该如何选择包含元素的类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 ]")
Answers:
只需使用普通的类选择器即可。
$('#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()它们是相当快,而使用一个后代选择调用灒发动机如所提到的,其尽管快,比建议的替代慢。
一律使用
//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');
$("#my_id .my_class")是较短的等价物;在这种情况下,使用属性选择器不会有任何好处。
也$( "#container" ).find( "div.robotarm" );
等于:$( "div.robotarm", "#container" )