首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用$element.each()时加快DOM访问速度

使用$element.each()时加快DOM访问速度
EN

Stack Overflow用户
提问于 2013-02-16 12:46:39
回答 2查看 97关注 0票数 0

我正试图对我庞大的javascript应用程序进行一些严重的延迟削减。我一直在阅读优化代码的方法,从我学到的一些东西中,我了解到:

  1. $(元素).each()使事情变得更慢
  2. 变量(和HTML对象)应该被缓存

这是我在应用程序中经常运行的函数中现有代码的一部分:

代码语言:javascript
复制
if($('.textbox').length > 0)
{   $(".textbox").each(function(){
             var parts = $(this).attr('id').split('_');
             // do some linear-time operations here with $this
            });
     });

到目前为止,我知道我应该将$this = $(this)放在.each()的开头,并且只使用$(this)。但我还能做什么呢?是否有更快捷的替代方式来使用.each()?我确实需要检查每个div.textbox类。

EN

Stack Overflow用户

回答已采纳

发布于 2013-02-16 12:50:33

但我还能做什么呢?

有几件事:

  1. if语句绝对没有意义(除非它有一个尚未显示的else子句),因为对空的jQuery对象调用.each是没有操作的。把它移开。
  2. 如果您不想删除它,那么至少要缓存DOM查找的结果,因为每次调用$('.textbox') jQuery都必须停止并查询DOM。
  3. id是DOM元素实例上的反射属性,因此$(this).attr("id").split('_')包含多个函数调用和通过使用this.id.split('_')可以避免的内存分配。

这就给了我们:

代码语言:javascript
复制
$('.textbox').each(function() {
    var parts = this.id.split('_');
    // Do something with `parts`
});

或者,如果有一个else您还没有显示:

代码语言:javascript
复制
var boxes = $('.textbox');
if (boxes.length) {
    boxes.each(function() {
        var part s= this.id.split('_');
        // ...
    });
}
else {
    // ...
}
票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14910440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档