2009-09-09 41 views
1

我正在研究一个拥有大量表的网页。 JQuery脚本处理每一行并决定需要应用哪种CSS样式。我正在使用此代码段向表格单元应用类将类应用于元素 - jQuery

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

功能上,它按预期工作。但是,在IE7.0中,运行此操作需要16ms。鉴于页面上的行数,这会快速增加至至少半秒。

如何让此运行更快?

+0

是选择器应该是“获取顶级父母​​为$ myElem”?你在使用嵌套表吗? –

+0

表结构是这样的:

的myElem具有参照对应的复选框,并且样式应该施加它的​​ – Nick

+0

看到我的答案为最高性能的方式来做到这一点 - http://stackoverflow.com/questions/1399893/applying-class-to-an-element-jquery/1400087#1400087 –

回答

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'); 
0

尝试使用addClass方法。

$("#ID").addClass("newclass"); 

并且当你想删除它时使用removeClass。

问题可能是处理类作为属性在IE中可能不快(这是我的猜测,因为我不使用IE)。

0

尝试

$myElem.parents('td').eq(0).addClass('requiredClass'); 
+0

该元素已经有一个CSS在执行此语句之前未知的类。所以,从理论上讲,我应该先做一个removeClass,然后再做一个addClass。不过,我不知道这个班的名字做了一个removeClass – Nick

+0

这个更干净,但会更慢。 – bobince

+0

@unknown - 在没有classname参数的情况下调用removeClass()将删除所有类:) –

0

使用addClass() method,它增加了指定的类(ES)到每个匹配的元素的。

$Elem.parent('td').addClass('requiredClass'); 
+0

该元素在执行此语句之前已经有一个未知的css类。所以,从理论上讲,我应该先做一个removeClass,然后再做一个addClass。不过,我不知道这个班级的名字做了一个removeClass – Nick

+0

它不是必须删除第一个班级。您可以在元素上定义多个类。 'asdf'将被设为** ** external_link和'highlight'。 – voyager

0

我认为你的问题是调用eq函数。看来你只想要第一个td这样下面是一个更合适的选择器。我也使用addClass函数来设置类的名称,而不是使用attr

$myElem.parent('td:first').removeClass().addClass('requiredClass'); 
+0

该元素在执行该语句之前已经有一个未知的css类。所以,从理论上讲,我应该先做一个removeClass,然后再做一个addClass。然而,我不知道该类的名称做removeClass – Nick

+0

而当我使用$ myElem.parents('td:first')。attr('class','requiredclass');我没有看到性能的提高 – Nick

+0

它不是必须删除第一类。您可以在元素上定义多个类。 'asdf'将被设置为'external_link'和'highlight'。 – voyager

相关问题