IE浏览器中的Jquery live运行速度非常慢

时间:2012-10-09 10:26:30

标签: javascript jquery

我注意到这一行

    $('#opp-tabs input[type=text]:not(#newActionText), #opp-tabs textarea').live('keyup', function() {
        onFormChanged();
    });

在IE8中运行速度极慢,它在firefox和chrom中工作得很好,但在IE中却没有,说实话它是'不'这个词的余地,它如何定义这个不同的IE在IE中的正常速度运行?

2 个答案:

答案 0 :(得分:4)

你真的应该确保选择器尽可能轻量级,如果在.live()方法中使用,尤其是。发生的事情是,事件实际上绑定到document.body,并且需要检查给定事件是否与原始选择器字符串匹配。这个过程可能非常昂贵,在你的情况下,它还需要调用 Sizzle ** ,这会使它更慢。

最佳案例解决方案,使用.on().delegate()来限制necesarry DOM冒泡。这意味着,您不会将事件处理程序绑定到body,而是绑定到最近的共享父节点,这会提高整体性能。其次,更重要的是,改进那个选择器

使用类名或诸如此类来查询您需要的节点,实际上它不会比当前状态差很多。

要优化当前表单,请尝试如下:

$('#opp-tabs input:text, #opp-tabs textarea').not('#newActionText').on('keyup', 'closest shared parent selector', function() {});

参考:.delegate().on()

** Sizzle是jQuery的javascript css-selector引擎<​​/ sup>

答案 1 :(得分:1)

添加到@ jAndy的答案,您可以将其表示为

$('#opp-tabs input[type=text], #opp-tabs textarea').live('keyup', function() {
    if(this.id != "newActionText") onFormChanged();
});