如何在已获取的jQuery匹配元素集合上正确使用find()方法检索目标元素
问题核心原因
jQuery的find()方法的作用是查找集合中所有元素的后代子节点,你要匹配的目标元素本身就是scrollItems集合中的成员,并非这些元素的后代,因此用find()检索不到结果。
正确实现方式
你可以用.filter()方法直接对当前scrollItems集合做筛选,这是最符合需求的写法:
scrollItems.removeClass('stick'); scrollItems.filter('#' + id).addClass('stick');
.filter()的作用就是过滤当前jQuery集合中的元素,仅保留符合指定选择器的元素,正好匹配你在已有集合中定位目标元素的需求。
之前写法的误区说明
- 第二种传入第二个上下文参数的逻辑本身是成立的,但你多调用了一次多余的
find(),修正后也可以生效:
// 修正后可运行,但不如filter写法直观高效 $('#' + id, scrollItems).addClass('stick');
- 因为id在整个DOM中是唯一的,全局查询
$('#'+id)本身性能损耗极低,如果你没有特殊的性能要求,原来的写法也完全可以正常使用。
内容的提问来源于stack exchange,提问作者Brian
相关产品推荐
相关产品推荐

