third - impar selector css
IE: nth-child() usando impar/par no funciona (6)
Como una buena solución, jQuery ha agregado esto a su proyecto y lograr esto usando JavaScript es aceptable:
Para mi CSS, tendría
.my_table tr.even{
background:#E6EDF5;
}
.my_table tr.odd{
background:#F0F5FA;
}
Y usaría jQuery para hacer esto:
$(document).ready(function() {
$(".my_table tr:nth-child(even)").addClass("even");
$(".my_table tr:nth-child(odd)").addClass("odd");
});
Mi tabla (que funciona perfectamente en Chrome, Firefox y Opera) no se muestra correctamente en Internet Explorer.
¡El fondo permanece blanco! (Estoy usando IE-8)
Código CSS:
/*My Table*/
.my_table{
border-collapse:collapse;
font:normal 14px sans-serif,tahoma,arial,verdana;
margin:5px 0;
}
.my_table th{
color:#fff;
background:#5E738A;
border:1px solid #3C5169;
text-align:center;
padding:4px 10px;
}
.my_table td{
color:#555;
border:1px solid #C1CAD4;
text-align:center;
padding:2px 5px;
}
.my_table tr:nth-child(even){
background:#E6EDF5;
}
.my_table tr:nth-child(odd){
background:#F0F5FA;
}
Es un problema de IE8 (y versiones anteriores de IE) y este enlace muestra una buena solución:
http://verboselogging.com/2010/01/17/making-nth-child-work-everywhere
Esta es la versión de Dojo, funciona bien:
dojo.addOnLoad(function(){
dojo.query("table tr:nth-child(odd)").addClass("odd");
dojo.query("table tr:nth-child(even)").addClass("even");
});
Hace algún tiempo, hice una solución simple de javascript para este problema :
https://gist.github.com/yckart/5652296
var nthChild = function (elem, num) {
var len = elem.length;
var ret = [];
var i = 0;
// :nth-child(num)
if (!isNaN(Number(num))) {
for (i = 0; i < len; i++) {
if (i === num - 1) return elem[i];
}
}
// :nth-child(numn+num)
if (num.indexOf(''+'') > 0) {
var parts = num.match(//w/g);
for (i = parts[2] - 1; i < len; i += parts[0] << 0) {
if (elem[i]) ret.push(elem[i]);
}
}
// :nth-child(odd)
if (num === ''odd'') {
for (i = 0; i < len; i += 2) {
ret.push(elem[i]);
}
}
// :nth-child(even)
if (num === ''even'') {
for (i = 1; i < len; i += 2) {
ret.push(elem[i]);
}
}
return ret;
};
El uso es bastante simple y similar al selector css:
var rows = document.querySelectorAll(''li'');
var num = nthChild(rows, 2);
var formula = nthChild(rows, ''3n+1'');
var even = nthChild(rows, ''even'');
var odd = nthChild(rows, ''odd'');
// Note, forEach needs to be polyfilled for oldIE
even.forEach(function (li) {
li.className += '' even'';
});
odd.forEach(function (li) {
li.className += ''odd'';
});
formula.forEach(function (li) {
li.className += '' formula'';
});
num.style.backgroundColor = ''black'';
IE8 no es compatible con el selector nth-child
, me temo:
Puede usar first-child y "+" para emular nth-child, ejemplo:
tr > td:first-child + td + td + td + td + td + td + td + td {
background-color: red;
}
Que seleccione la novena columna, al igual que nth-child (9), y eso funciona en IE