$(“*”,$(“#container1”))和$(“#container2”)之间有什么区别.find(“*”)?

时间:2009-10-26 17:09:48

标签: jquery

$("*", $("#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

2 个答案:

答案 0 :(得分:2)

如果使用得当,上下文选择器与find没有区别。 Resig表示他不喜欢上下文选择器,并且更喜欢人们使用.find(),因为它在语义上更有意义。

有许多方法可以搞砸上下文;例如,传递字符串不起作用,导致选择器默认解析整个文档。我很确定你的例子是正确使用上下文(没时间测试),但是再次使用.find()击败了这种不确定性。

答案 1 :(得分:1)

我相信上下文选择器必须隐式调用 find()本身。

最简单的方法是使用 find()

编辑:1.3.2的源代码:

// HANDLE: $(expr, [context])
// (which is just equivalent to: $(content).find(expr)