Chinaunix首页 | 论坛 | 博客
  • 博客访问: 407961
  • 博文数量: 155
  • 博客积分: 2590
  • 博客等级: 少校
  • 技术积分: 2161
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-25 09:33
文章分类

全部博文(155)

文章存档

2015年(1)

2014年(2)

2013年(55)

2012年(97)

分类: jQuery

2013-07-06 14:53:07

jQuery中的:first相当于执行完选择器后再取第一个结果,也就是说$("*:first")和$("*").eq(0)选择到的东西是一样的。但是find这个方法的行为是遍历给定的对象来执行选择器,既然选择器会被执行多次,那就意味着它的:first就未必只有一个结果了。
  比如下面这个文档的选择就能看出差异
  1.  
    •    
    •  
  2.  
    •    
    • 次碳酸钴
    •  
  •  
      第一行代码只有一个选择器和一个:first,这样必然输出一个结果。第二行代码先执行一个普通的选择器来选定两个ul,之后遍历这个结果,再执行带:first的选择器。由于ul有两个,带:first的选择器就会被执行两次,因此这里就会输出两个结果。
      这个逻辑正确吗?其实它正不正确已经无所谓了。因为在jQuery中可以找到与它矛盾的逻辑,它要是正确,另一个就是错的,它要是错的另一个才能正常。依然用刚才的HTML文档,执行下面这两行代码试试。
    1. console.log($("div ul").children("li:first").get());
    2. console.log($("li").filter("li:first").get());
      得到的结果我就不截图了,他们都输出一个LI,也就是说children和filter方法都不存在find的情况。这些方法采用的都是遍历,为什么他们的结果和find不同呢?
      以我的逻辑来看,是find这个方法的设计有问题。
    本文版权归属:挖煤机  转载请注明,肆意删除链接,我们将保留追责权利。
    阅读(1347) | 评论(0) | 转发(0) |
    给主人留下些什么吧!~~