jQuery源码分析中的选择器部分

今天看了jQuery源码分析中的选择器部分。之前一直以为与css一样是从右向左选择,今天才知道要分情况。用下面这个例子进行分析说明:
(1)$('div button:first') :first是位置过滤器,div下所有button中的第一个,只匹配一个元素
(2)$('div button:first-child') :first-child是子元素过滤器,每个div下button中的第一个,为每个父元素div匹配一个子元素button(准确的说,button必须是div的第一个子元素才会匹配)
对$('div button:first')试试从右向左:
(1)选择查找button:first,先根据tag找出所有button,然后用集合过滤器找到第一个button
(2)第2步?没有第2步!第1步已经错误,第一步找的是所有button的第一个,而我们要找的是div下的button中的第一个
:first和:first-child的过滤对象有什么区别:
:first的过滤对象是'div button'的查找/过滤结果,依赖于前一个块表达式
:first-child的过滤对象是'button'自身,要检查'button'是否其父元素下的第一个元素,通过'button'本身就可以执行这个过滤,因为通过'button'就可以定位到父元素,然后再检查过滤到的'button'的祖先是否div
$('div button:first')的工作流程应该是从左向右:
(1) 找到div
(2)找到所有div下的所有button
(3)找到所有button中的第一个
可见从右向左不是万能的,必要时仍然需要传统的从左向右,什么时候需要从左向右呢?
答案是有位置过滤器的时候。 因为位置过滤器所在的块表达式的过滤结果,依赖于它前一个的块表达式查找/过滤的结果,所有要先查找/过滤前一个,即从左向右;而其他过滤器仅依赖于当前元素本身。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值