В чем разница между $ ("*", $ ("# container1")) и $ ("# container2"). Find ("*")? - PullRequest
1 голос
/ 26 октября 2009

В чем разница между $("*", $("#container1")) и $("#container2").find("*") ?. Я обычно использую АА, но не очень хорошо в этом случае может быть более нечетным.

<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 ]

2 голосов
/ 26 октября 2009

При правильном использовании селектор контекста ничем не отличается от поиска. Резиг заявил, что ему не нравится селектор контекста и он предпочел бы, чтобы люди использовали .find (), так как это имеет смысл с точки зрения семантики.

Есть много способов испортить контекст; например, передача строки не работает и приводит к тому, что селектор по умолчанию анализирует весь документ. Я вполне уверен, что ваш пример использует контекст правильно (нет времени для тестирования), но опять же, использование .find () превосходит эту неопределенность.

1 голос
/ 26 октября 2009

Полагаю, что селектор контекста должен неявно вызывать find () .

Лучше всего просто использовать find () для простоты.

РЕДАКТИРОВАТЬ: исходный код от 1.3.2:

// HANDLE: $(expr, [context])
// (which is just equivalent to: $(content).find(expr)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...