是否调用$find是一个相对昂贵的操作

Is calling $find a relatively expensive operation?

本文关键字:相对 一个 操作 调用 find 是否      更新时间:2023-09-26

我只是想知道这两种编码风格之间的优缺点:

var foo;
$(document).ready( function() {
    foo = $find(fooID);
});
function OnBarClicked()
{
    foo.doStuff();
    foo.doMoreStuff();
}

相比
function OnBarClicked()
{
    $find(fooID).doStuff();
    $find(fooID).doMoreStuff();
}

我觉得前者可能有问题,但我不知道为什么会有问题。另外,如果$find()有寻道时间…在开始时找到所有保证被"找到"2次以上的变量,然后使用一个实例是否更有效?

编辑:$find描述和用法

var radListBox1ID = "<%= RadListBox1.ClientID %>";
var radListBox = $find(radListBox1ID);
alert(radListBox.get_id()); //Alerts RadListBox1.ClientID

假设您正在询问是否使用$()查询一次DOM vs多个(每个语句一个)…

是的,它是更效率使用单个$()和存储结果在一个变量中,而不是调用jQuery在每一个语句,如果你使用元素多次在同一范围

这是特别有用的事件处理程序,你引用this作为一个jQuery对象多次。

$('#element').click(function(e) {
    var $clicked = $(this);
    $clicked.doStuff();
    $clicked.doMoreStuff();
});

首先,您觉得在第一个示例中存在一个问题,而且确实存在:您在onBarClicked函数无法访问的本地上下文中声明foo变量。如果你尝试使用它,你会得到一个未定义的错误。要解决这个问题,可以在全局作用域中声明foo:

var foo;
$(document).ready(function () {
    foo = $(fooID);
});

当涉及到你的实际问题时,简短的答案是:是的。运行一次搜索并存储结果将更快。

但是如果你只是通过它的ID来搜索一个元素,那么说实话,它可能不会有太大的区别。它真正重要的时候是当你有一个复杂的选择器,包括属性选择器、伪元素或后代组合符等等。您肯定希望保存该结果,而不是一次又一次地运行它。

第一个不起作用,因为foo不会在OnBarClicked中定义。一旦文档准备好,foo将在回调函数中设置。

我推荐这种方法:

$( function () {
    // get all the references (to the DOM elements) ASAP
    var header = $( '#header' )[0],
        nav = $( '#navigation' )[0],
        toolbar = $( '#toolbar' )[0];
        // etc.
    // now whenever you need to work with a referenced DOM element
    // just wrap it inside a jQuery object
    $( nav ).click( function () { ... });
});
相关文章: