$("*", $("#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
答案 0 :(得分:2)
如果使用得当,上下文选择器与find没有区别。 Resig表示他不喜欢上下文选择器,并且更喜欢人们使用.find(),因为它在语义上更有意义。
有许多方法可以搞砸上下文;例如,传递字符串不起作用,导致选择器默认解析整个文档。我很确定你的例子是正确使用上下文(没时间测试),但是再次使用.find()击败了这种不确定性。
答案 1 :(得分:1)
我相信上下文选择器必须隐式调用 find()本身。
最简单的方法是使用 find()。
编辑:1.3.2的源代码:
// HANDLE: $(expr, [context])
// (which is just equivalent to: $(content).find(expr)