我正在开发一个包含大量表格的网页。 JQuery脚本处理每一行并决定需要应用哪种CSS样式。我正在使用此代码段将类应用于表格单元格
$myElem.parents('td').eq(0).attr('class', 'requiredClass');
从功能上讲,它按预期工作。但是,在IE7.0中,运行它需要16ms。考虑到页面上的行数,这很快就会增加至少半秒。
如何让这次跑得更快?
答案 0 :(得分:3)
根据您在课题中的评论,这应该是最高效的
$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');
答案 1 :(得分:0)
尝试使用addClass方法。
$("#ID").addClass("newclass");
如果要删除它,请使用removeClass。
问题可能是在IE中处理类作为属性可能不快(这是我的猜测,因为我不使用IE)。
答案 2 :(得分:0)
试
$myElem.parents('td').eq(0).addClass('requiredClass');
答案 3 :(得分:0)
使用addClass() method,它将指定的类添加到每组匹配的元素中。
$Elem.parent('td').addClass('requiredClass');
答案 4 :(得分:0)
我认为您的问题在于调用eq
函数。看起来你只想要第一个td
,所以下面是一个更合适的选择器。我也使用addClass函数来设置类名,而不是使用attr
$myElem.parent('td:first').removeClass().addClass('requiredClass');