2013-04-30 83 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