我正在研究一个拥有大量表的网页。 JQuery脚本处理每一行并决定需要应用哪种CSS样式。我正在使用此代码段向表格单元应用类将类应用于元素 - jQuery
$myElem.parents('td').eq(0).attr('class', 'requiredClass');
功能上,它按预期工作。但是,在IE7.0中,运行此操作需要16ms。鉴于页面上的行数,这会快速增加至至少半秒。
如何让此运行更快?
我正在研究一个拥有大量表的网页。 JQuery脚本处理每一行并决定需要应用哪种CSS样式。我正在使用此代码段向表格单元应用类将类应用于元素 - jQuery
$myElem.parents('td').eq(0).attr('class', 'requiredClass');
功能上,它按预期工作。但是,在IE7.0中,运行此操作需要16ms。鉴于页面上的行数,这会快速增加至至少半秒。
如何让此运行更快?
在问您的评论来看,这应该是最高效的
$Elem.parent('td').addClass('requiredClass');
它使用parent()
代替parents()
,前者只查看即时父母,后者查看所有父母直至但不包括根节点。
<td>
在parent()
中最有可能是多余的,因为它可以过滤掉那些不是<td>
元素的父节点。由于您一次处理每一行,我想可以保证在每种情况下,父母都是<td>
,因此我也会删除该过滤器。因此,它成为
$Elem.parent().addClass('requiredClass');
它可能会更快犹若,而不是一次处理每一行,你能确定需要应用某一类的<td>
问题,然后发出一个行的集合选择器添加类。这可能是不可能的,这取决于正在执行的检查,但只是一个想法。
编辑:
你说你需要添加新的人之前先删除一个未知的类,但不知道类的名字将在每种情况下什么。调用removeClass()而不使用类名字符串参数将删除所有类。如果您不知道,Elements可以定义多个类,每个类都用一个空格分隔,例如<td class="class1 class">
。jQuery的addClass()命令将确保添加的每个新类名将被一个空格与其他任何其他类分开。因此,选择器现在看起来像
$Elem.parent().removeClass().addClass('requiredClass');
尝试使用addClass方法。
$("#ID").addClass("newclass");
并且当你想删除它时使用removeClass。
问题可能是处理类作为属性在IE中可能不快(这是我的猜测,因为我不使用IE)。
使用addClass() method,它增加了指定的类(ES)到每个匹配的元素的。
$Elem.parent('td').addClass('requiredClass');
我认为你的问题是调用eq
函数。看来你只想要第一个td
这样下面是一个更合适的选择器。我也使用addClass函数来设置类的名称,而不是使用attr
$myElem.parent('td:first').removeClass().addClass('requiredClass');
是选择器应该是“获取顶级父母为$ myElem”?你在使用嵌套表吗? –
表结构是这样的:
看到我的答案为最高性能的方式来做到这一点 - http://stackoverflow.com/questions/1399893/applying-class-to-an-element-jquery/1400087#1400087 –