繁体   English   中英

大表行突出显示的jQuery慢度

[英]jQuery Slowness With Large Table Row Highlighting

我有这个小片段,用于在XSLT页面上突出显示行,该行必须使用onclick事件回传一些数据,但是由于该行不是链接,因此我必须确保有一个手形光标以及该行将突出显示,以便用户理解它是可单击的,以及他们所在的行。

<script type="text/javascript">
  $(document).ready(function() {
    $('#stocks tr:not(.exclude)').css('cursor', 'hand');
    $('#stocks tr:not(.exclude)').hover(function() {
      $(this).addClass('hover');
    }, function() {
      $(this).removeClass('hover');
    });
  });
</script>

这些表很大,通常最多5000行。 当有大量行时,此jQuery脚本使用的行突出显示速度很慢。 我写了tr:not(.exclude)选择器,但我想这可能是导致它变慢的原因吗? 关于如何加快速度的任何想法?

编辑 :我看到许多答案都很好,但是它们并没有解决至少有5,000行以上的事实。

编辑编辑 :必须确保IE7至少设置了以下doctype才能使tr:hover正常工作。 我的速度仍然很慢,但是这必须归结为其他原因。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

这种效果只能用CSS来实现。 尝试类似:

#stocks tr:hover {
   cursor: pointer;
   background-color: khaki;
}

#stocks tr.exclude:hover {
   cursor: inherit;
   background-color: inherit;
}

添加这么多事件的速度很慢,每行看起来像两个事件。 相反,您需要使用事件委托 您可以扮演自己的角色,或者该链接会有所帮助。 基本思想是,您仅将一个或两个事件处理程序附加到表本身,并且在这些事件处理程序内,您将看到获得输入了哪一行的信息并相应地更改视图。

好的! 应该这样做:

$(document).ready(function() {
    $('tr:not(.exclude)', '#stocks')
    .css('cursor', 'hand')
    .live("mouseover", function() {
        $(this).addClass('hover');
    }).live("mouseout", function() {
        $(this).removeClass('hover');
    });
});
  1. 按照建议使用EventDelegation。 在表上添加一个事件侦听器。 并且
  2. 使用明确的颜色,例如#dee9f3(与“蓝色”相对)
  3. 直接分配样式,而不是通过CSS开关进行分配,例如

row.style.backgroundColor ='#dee9f3';

我很确定live会利用事件委托。 可能有效,具体取决于鼠标悬停的方式。

尝试这个:

$(document).ready(function() {
    $('tr', '#stocks')
    .not('.exclude')
    .css('cursor', 'hand')
    .find('td')
    .live("mouseover", function(){

          $(this).hover(function() {
          $(this).parent('tr').addClass('hover');  
        }, function() {
            $(this).parent('tr').removeClass('hover');
            $(this).unbind();  ////not sure about this part
        });
         $(this).trigger('hover');
    });
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM