将类应用于元素 - JQuery

时间:2009-09-09 14:03:52

标签: jquery

我正在开发一个包含大量表格的网页。 JQuery脚本处理每一行并决定需要应用哪种CSS样式。我正在使用此代码段将类应用于表格单元格

$myElem.parents('td').eq(0).attr('class', 'requiredClass');

从功能上讲,它按预期工作。但是,在IE7.0中,运行它需要16ms。考虑到页面上的行数,这很快就会增加至少半秒。

如何让这次跑得更快?

5 个答案:

答案 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');