Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

jQuery的:first在find方法中的问题

  jQuery中的:first相当于执行完选择器后再取第一个结果,也就是说$("*:first")和$("*").eq(0)选择到的东西是一样的。但是find这个方法的行为是遍历给定的对象来执行选择器,既然选择器会被执行多次,那就意味着它的:first就未必只有一个结果了。
  比如下面这个文档的选择就能看出差异 <div>
  <ul>
    <li>www.web-tinker.com</li>
  </ul>
  <ul>
    <li>次碳酸钴</li>
  </ul>
</div>
<script src="jquery.js"></script>
<script>
console.log($("div ul li:first").get());
console.log($("div ul").find("li:first").get());
</script>

  第一行代码只有一个选择器和一个:first,这样必然输出一个结果。第二行代码先执行一个普通的选择器来选定两个ul,之后遍历这个结果,再执行带:first的选择器。由于ul有两个,带:first的选择器就会被执行两次,因此这里就会输出两个结果。
  这个逻辑正确吗?其实它正不正确已经无所谓了。因为在jQuery中可以找到与它矛盾的逻辑,它要是正确,另一个就是错的,它要是错的另一个才能正常。依然用刚才的HTML文档,执行下面这两行代码试试。 console.log($("div ul").children("li:first").get());
console.log($("li").filter("li:first").get());
  得到的结果我就不截图了,他们都输出一个LI,也就是说children和filter方法都不存在find的情况。这些方法采用的都是遍历,为什么他们的结果和find不同呢?
  以我的逻辑来看,是find这个方法的设计有问题。
网名:
34.203.213.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^