Javascript IE的jQuery优化

Javascript IE的jQuery优化,javascript,jquery,internet-explorer,jquery-selectors,Javascript,Jquery,Internet Explorer,Jquery Selectors,我有以下职能: function doBlamingItem($cell, showEditMark) { $cell.hover(function () { $cell.toggleClass('clickable-cell', showEditMark).toggleClass('editing-cell', !showEditMark); }, function() { $cell.removeClass('clickable-cell ed

我有以下职能:

function doBlamingItem($cell, showEditMark) {
    $cell.hover(function () {
        $cell.toggleClass('clickable-cell', showEditMark).toggleClass('editing-cell', !showEditMark);
    }, function() {
        $cell.removeClass('clickable-cell editing-cell');
} );};
在$(document).ready()中,我将此函数应用于表中的某些单元格(~500),当我在其上移动鼠标时-在FF或Chrome中,一切正常,但IE7-9开始滞后,我不知道如何修复它:(

和$(document.ready()中的代码:

我对每个单元格都使用doblamigitem,因为对于其中一些单元格,showEditMark=true,对于其他单元格,showEditMark=false,您的代码基本上是(1)查找~500个元素,(2)迭代它们(3)分配悬停事件(由mouseenter和mouseleave组成)。您听说过吗

设置时间几乎为零(只注册了2个事件处理程序,而不是1000个)。未选择和遍历任何元素

(function($, undefined){
  // if you want it global
  var showEditMark = true;
  // otherwise save that state to some element's data()

  $(function(){
    $(document.body).delegate('.your-table-selector td', {
      mousenter: function(e){
        $(this)
          .toggleClass('clickable-cell', showEditMark)
          .toggleClass('editing-cell', !showEditMark);
      },
      mouseleave: function(e){
        $(this).removeClass('clickable-cell editing-cell');
      }
    });
  });
})(jQuery);

感谢所有回答我问题的人,但当我意识到问题不在javascript中时…我的页面有很大的元素DOM树和许多CSS样式,因此IE在呈现它时有问题

对不起,我帮不上忙,但我确实想说,至少在这个问题上,你的英语看起来并不糟糕:)您确定不对每个元素应用500个事件处理程序吗?!请显示调用此函数的代码。请注意IE仍然比竞争对手慢一点。此外,表格在HTMLDOM世界中非常特殊。这是一个很好的例子(在jsperf上的大量其他案例中),我对每个单元格都使用
doblamigitem
,因为对于其中一些单元格
showEditMark=true
,对于其他单元格
showEditMark=false
,您仍然可以对所有单元格使用相同的事件处理程序,事件处理程序必须检查给定单元格的
showEditMark
true
还是
false
。我将代码更改为使用委托,并创建了全局数组:window.flags[cellID]=showEditMark;但是现在我的页面开始变得更滞后了:(我必须查看代码来告诉您做错了什么…我想知道为什么您使用全局变量而不是简单的类。因为使用全局数组,此代码比$.data()运行得更快)
(function($, undefined){
  // if you want it global
  var showEditMark = true;
  // otherwise save that state to some element's data()

  $(function(){
    $(document.body).delegate('.your-table-selector td', {
      mousenter: function(e){
        $(this)
          .toggleClass('clickable-cell', showEditMark)
          .toggleClass('editing-cell', !showEditMark);
      },
      mouseleave: function(e){
        $(this).removeClass('clickable-cell editing-cell');
      }
    });
  });
})(jQuery);