为何jQuery中$('.content', the_selector)嵌套选择器无法生效?
问题原因分析
你的第一段代码里用的$('.content', the_selector)是后代选择器的简写形式,等价于$(the_selector).find('.content'),它的作用是在the_selector匹配到的元素的后代节点里查找.content元素。
而修改后的代码是直接遍历the_selector匹配到的元素,给这些元素本身添加红色背景。
两种写法的差异本质是:当前你的页面结构里,.flickr_badge_image元素的内部并没有.content子元素或后代元素——要么.flickr_badge_image本身就是你要设置背景的目标元素,要么.content和.flickr_badge_image是同级关系,并非嵌套关系。
举个具体的结构对比:
- 如果页面结构是这样,第一段代码才会生效:
<div class="flickr_badge_image"> <div class="content">这段内容会变红</div> </div>
- 如果是下面两种结构,第一段代码就找不到目标元素:
- 目标元素本身就是
.flickr_badge_image:
<div class="flickr_badge_image">我才是要变红的元素,但没有.content子元素</div>.content和.flickr_badge_image是同级:
<div class="flickr_badge_image"></div> <div class="content">我是要变红的元素,但不在.flickr_badge_image内部</div> - 目标元素本身就是
你之前用$('.content', the_selector)能生效,是因为当时的页面结构里,the_selector对应的元素确实包含.content后代,而现在页面结构发生了变化,才导致这种写法失效。
内容的提问来源于stack exchange,提问作者backups
相关产品推荐
相关产品推荐

