2010-07-19 9 views
12

Bugün jQuery seçicileri ve addClass() işlevinin bir bileşiminin IE8'de düzgün çalışmadığı dikkatimi çekti.IE8 ve jQuery seçicileri

jQuery(document).ready(function($){ 
    $("#table1 tr:nth-child(even)").addClass("even"); 
} 

Ve CSS yazdım: Ben çift sayılı satırlar bir tabloda seçilmiş olduğundan emin olmak istediğinizde

Örneğin, ben yazdım

#table1 tr:nth-child(even), #table1 tr.even { 
    background-color: #ff0; 
} 

Firefox'ta , Chrome, Safari ve Opera, hatta CSS dosyasındaki sözde sınıf seçicisi olmadan çift sayılı satırlar seçilir. Ancak, IE8'de durum böyle değil. Satırlarda farklı bir arka plan rengi yoktur. Ben kullanıldığında çünkü

Bu garip:

jQuery(document).ready(function($){ 
    $("#table1 tr:nth-child(even)").css({"background-color":"#ff0"}); 
} 

Seçili satırları IE8 vurgulanır.


Sorun örneği sorusu burada görülebilir olduğunu - 24ways example. Firefox, Chrome, Safari ve Opera'da, garip satırlara "garip" bir sınıf atanır. Ancak, IE8'de, "tek" bir sınıf atanmamış ve vurgulanmamıştır.

cevap

11

seçici jQuery tarafında düzgün çalışır ... ama nth-child tanımadığından IE8 (the specification uygun olarak) tamamen stil kuralını atar: Bunu bölerseniz

tr:nth-child(odd) td, tr.odd td { 
    background-color: #86B486; 
} 

, bu doğru ll çalışması:

tr:nth-child(odd) td { 
    background-color: #86B486; 
} 
tr.odd td { 
    background-color: #86B486; 
} 

Here's the original version (tek IE8 kaldırır kuralı) ve here's a fixed sample, kural bölünmüş. kural like thisters tamlık aşkına


,
yardım etmez: Bu ie8 ve IE9 benim için çalışıyor

tr.odd td, tr:nth-child(odd) td { 
    background-color: #86B486; 
} 
+0

Nick, düzeltme için çok teşekkürler. Büyü gibi çalıştı. Gerçekten IE8'in bu şekilde davrandığını bilmek şaşırtıcı çünkü diğer sahte seçmenler için bu gerçekleşmiyor. Örneğin, jQuery'de ilk-çocuk ve son-çocuk sözde seçicileri kullandığımda, hala amaçlandığı gibi çalışır. Tekrar teşekkürler! – Terry

+1

@teddyrised - Hoş geldin :) IE'nin neden böyle davrandığından emin değilim, sadece 50.000 şeyi yanlış yere ekleyeceğim. Bir kenara, soruyu kapatmak için cevap kabul etmek emin olun/bir sonraki adam google üzerinde bu sorunu bulma - soldaki onay işareti ile :) –

+0

Ah, yardım için çok teşekkürler. Sonsuza dek etrafta dolaşırken, taşma yapmak için hala yeni. Teşekkürler! – Terry

2

ilk background-color ile 2 sınıfları ihtiyaç

.even { background-color: white; } 
.odd { background-color: #ff0; } 

jquery find ile tr: odd add tr: çift ve karşılık gelen sınıfı ekleyin

$(document).ready(function() { 
     $('#table1').find('tr:odd').addClass("odd"); 
     $('#table1').find('tr:even').addClass("even"); 
});