javascript - 为 Chrome 优化 jquery 选择器

标签 javascript jquery optimization jquery-selectors

我有以下 jquery 代码来循环 525 个(我知道,很多!)复选框:

var elements = $("#profile-list table tr input[type=checkbox].email-checkout:not(:checked)");

$.each(elements, function(i) {
    $(elements[i]).attr('checked', 'checked');
});

更新 html 如下所示:

<table>
    <tr>
        <th>Name</th>
        <th>Title</th>
        <th>E-mail</th>
        <th>Telephone</th>
        <th id="email_check"><img src="check_black.png"/></th>
   </tr>
   <?php foreach ($this->profiles as $profile): ?>
        <tr>
            <?php echo $this->presentProfile($profile, 'list') ?>
        </tr>
   <?php endforeach; ?>

这基本上遍历了数据库中的所有配置文件,并为每个配置文件创建了一个表行,其中最后一个表数据包含一个复选框,可以选择将电子邮件发送到该复选框。如果用户单击 ID 为“email_check”的表头,则 javascript 代码应该启动,这就是 Chrome 失败的地方。

我使用以下代码附加事件:

$("#email_check img").live('click', function() {
     //my code
}

当我在 Firefox (mac) 中运行这段代码时,它运行得很顺利,但是当我在 Chrome (mac) 中运行它时,它需要很长时间并最终给我一个窗口,chrome 为我提供了关闭窗口的选项,所以基本上它永远不会完成这个循环。

我一直在尽可能地优化这个选择器,从 jquery 1.3 开始,我知道他们从左到右切换到右到左选择器,这基本上意味着我应该尽量让我的右边选择器尽可能具体。它能比我目前拥有的更具体吗?

还是循环只花了这么长时间?我尝试从 $.each 切换到常规的 for() 而没有得到肯定的结果。

关于如何解决此问题的任何提示或想法?

英吉贝尔

最佳答案

我真的不认为这是一个选择器问题。

您的选择器是 querySelectorAll 的有效选择器,这意味着它将非常快。

我在 Mac 上的 Chrome 中针对一个包含 250 行的表格测试了精确选择器,结果是即时的。

我猜还有其他事情正在发生。

关于javascript - 为 Chrome 优化 jquery 选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4106061/

相关文章:

javascript - 如何获得同位素以避免与可变尺寸瓷砖的差距

javascript - 正则表达式语法困难

javascript - 为什么这个加法或减法不起作用?

javascript - 条形图不适合图表区域

c++ - 关于循环变量优化的标准合规行为是什么?

c++ - 编译器会在析构函数中优化 memset 吗?

javascript - 单击文档而不是特定元素警报

javascript - jQuery GeoComplete : How can I access the map object?

javascript - 根据选定的李显示相关李

php - 完整日历 : improve event fetching speed