2012-06-19 43 views
4

我正在使用jQuery处理IE7中的不受支持的选择器& 8(主要是:nth-child:last-child)。我读过addClass比使用jQuery的css方法更具性能,所以我重构了我的JS来做到这一点。许多选择器和添加类

什么是最好的方法添加到多个(有时很多!)不同的选择器相同的类?将它们全部放入相同的语句并在列表末尾使用addClass是否安全?

例如:

$('.selector1:nth-child(3), 
    .diff-selector2:last-child, 
    #another-selector:nth-child(2), 
    tr.highlighted td:last-child, 
    h2.job-title:last-child').addClass('fallback-class'); 

是否有限制或在其选择的那个列表变得很慢点?我应该为这些选择器列表创建变量吗?有更好的方法吗?

最后说明:不幸的是,使用Selectivizr让IE7陷入停顿。这就是我决定使用上述方法的原因。

+1

我认为添加一个普通的类来教授所讨论的控件不是一种选择吗? –

+1

只需重构你的html,所以你永远不需要使用那些非常慢的选择器。如果没有缓存,对于每个检查第n个子元素的元素,都需要遍历该元素的父元素的所有子元素。 – Esailija

+0

不幸的是,这是一个我并没有真正访问HTML的地方,我做的是由CMS(Drupal)控制的东西。 – ctrlaltdel

回答

2

2种方式,我想起

1)u能共同类型设置为你的元素,并将它们添加类

<p class="addThis">1</p> 
<p>2</p> 
<span class="addThis">3</span> 
<a>4</a> 
<p>5</p> 
<a class="addThis">6</a> 

$('.addThis').addClass('fallback-class'); //1,3,6 will be added classes 

2)u可以使用父母/子女方法

<p> 
    <a>1</a> 
    <span>2</span><!-- wont be added class --> 
</p> 
<p> 
    <a>3</a> 
</p> 
<a>3</a><!-- wont be added class --> 
<p>4</p><!-- wont be added class --> 

$('p').children('a').addClass('fallback-class'); 
//this will adds class which got "a" selector inside "p" 

$('a').parent('p').addClass('fallback-class'); 
//this will adds class "p" selector which got children "a"