2013-04-30 53 views
8

在jquery中,似乎有两种方法可以在DOM中的无序列表中找到列表项。css选择器vs jQuery遍历

$("ul>li"); 

$("ul").find("li"); 

有没有为什么,后者可能是更理想的一个原因?似乎需要更多代码才能获得相同的结果。

+1

'find'选择所有匹配派生元素,'>'是直接子选择。这表明你还没有阅读jQuery文档。 – undefined 2013-04-30 20:28:38

+0

你错了。 '$(“ul> li”)'只会找到所有'ul'的第一个'li',其中'$(“ul”)。find(“li”)'将在每个'ul'中找到所有'li' 。你的意思是在第一种情况下:'$(“ul li”)'对吗? – WooCaSh 2013-04-30 20:28:53

+0

*取决于*。在大多数情况下,试图根据性能来决定使用哪个版本是过时的优化,所以在大多数情况下,选择更易维护和/或易于阅读/理解的版本更有意义,而不必担心哪一版本更快。 – 2013-04-30 20:29:18

回答

11

是。速度。每次都会赢得.find()。加工速度无异于!

jsPerf speed test to show what I mean

虽然.find()将获得一切,这是一个下级(孩子的孩子,孩子,孩子的孩子,等子女),并且>是直接孩子选择。它是一个更好的苹果对苹果比较下列任一:

  • $('ul li') VS $('ul').find('li')
  • $('ul > li') VS $('ul').children('li')

但如果你做.find('li')它仍然是最快的方法这样做,甚至比.children('li')快。

updated jsPerf to include .children()

0

1)他们是不一样的,第二种形式将相当于$("ul li");,第一个是相当于$("ul").children("li")

2)如果你使用第二种形式,可以简化jQuery的解析任务。但是它使你的代码更简单,所以我不会推荐它,除非你证明速度与你的情况非常相关。这就是说,你通常有更多的代码,例如一些元素缓存或其他遍历函数,证明使用find