$("*", $("#container1"))
和$("#container2").find("*")
之間的區別是什麼? 我通常使用AA,但在這種情況下可能會更加奇怪。
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js" type="text/javascript"></script>
<script language="JavaScript">
$(function(){
var endTime = 0, iniTime = 0, counter = 0;
iniTime = (new Date()).getTime();
$("*", $("#container1")).each(function()
{
counter++;
});
endTime = (new Date()).getTime();
$("#result").append("<div>Container enviroment -> "+counter+" "+(endTime-iniTime)+"</div>");
endTime = 0; iniTime = 0; counter = 0;
iniTime = (new Date()).getTime();
$("#container2").find("*").each(function()
{
counter++;
});
endTime = (new Date()).getTime();
$("#result").append("<div>Find method -> "+counter+" "+(endTime-iniTime)+"</div>");
});
</script>
</head>
<body>
<div id="result"></div>
<div id="container1">
<span></span>...
</div>
<div id="container2">
<span></span>...
</div>
</body>
</html>
Result:
IE8
Container enviroment -> 9752 282
Find method -> 9752 296
Chrome 4.0
Container enviroment -> 9752 65
Find method -> 9752 66
Firefox
Container enviroment -> 9752 135
Find method -> 9752 125
Safari
Container enviroment -> 9752 46
Find method -> 9752 51
但是你不覺得給它一個開始上下文會阻止它不必掃描整個DOM,從而選擇更好的表現?取決於頁面,這可能會對性能產生重大影響。 – 2009-10-26 17:17:18
我確實注意到了他的測試,但由於不切實際的標記結構,我不確定它們是否相關。 – 2009-10-26 17:17:59
+1完全同意。如果它對OP有幫助,這裏的上下文有一篇很好的博客文章:http://beardscratchers.com/journal/jquery-its-all-about-context – karim79 2009-10-26 17:18:17