2012-06-19 51 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"