2010-07-19 8 views
12

Aujourd'hui, j'ai appris qu'une combinaison de sélecteurs jQuery et de la fonction addClass() ne fonctionnait pas correctement sur IE8.Sélecteurs IE8 et jQuery

Par exemple, quand je veux faire en sorte que les lignes paires sont sélectionnées dans une table, j'ai écrit:

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

Et pour le CSS, j'ai écrit:

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

Dans Firefox , Chrome, Safari et Opera, même sans le sélecteur de pseudo-classe dans le fichier CSS, les lignes paires sont sélectionnées. Cependant, dans IE8, ce n'est pas le cas. Les lignes n'ont pas une couleur d'arrière-plan différente.

C'est bizarre parce que quand je:

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

Les lignes sélectionnées sont mises en évidence dans IE8.


Un exemple du problème est question peut être vu ici - 24ways example. Dans Firefox, Chrome, Safari et Opera, les lignes impaires sont assignées à une classe "impaire". Cependant, dans IE8, ils ne sont pas assignés à une classe "impaire" et ne sont pas mis en surbrillance.

Répondre

11

Le sélecteur fonctionne correctement sur le côté jQuery ... mais IE8 rejette la règle de style tout à fait (en conformité avec the specification) parce qu'il ne reconnaît pas nth-child:

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

Si vous divisez, il » correctement le travail ll:

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

Here's the original version (une seule règle IE8 supprime) et here's a fixed sample, avec la scission de la règle.


Par souci d'exhaustivité, inversant la règle like thisne le fait pas aide:

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

Nick, merci beaucoup pour la solution. Cela a fonctionné comme par magie. Il est vraiment étonnant que IE8 se comporte de cette façon, car pour d'autres pseudo-sélecteurs, cela n'arrive pas. Par exemple, lorsque j'ai utilisé des pseudo-sélecteurs first-child et last-child dans jQuery, cela fonctionne toujours comme prévu. Merci encore! – Terry

+1

@teddyrised - Bienvenue :) Je ne suis pas sûr pourquoi IE se comporte comme ça, je vais juste l'ajouter à la liste des 50 000 choses qu'il fait mal. En passant, assurez-vous d'accepter les réponses pour fermer la question/aider le prochain gars à trouver ce problème sur google - via la coche sur la gauche :) –

+0

Ah, merci beaucoup pour l'aide. Je suis encore nouveau pour débordement de pile bien que je sois caché autour pour toujours. Merci! – Terry

2

cela fonctionne pour moi dans IE8 et IE9 vous devez d'abord 2 classes avec l'arrière-plan de couleur

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

puis avec jquery trouver tr: impair ajouter tr: pair et ajouter la classe correspondante

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