IE:nth-​​child()使用odd / even不起作用

时间:2011-11-18 21:09:38

标签: css css3 internet-explorer css-selectors css-tables

我的桌子(在Chrome,FireFox和Opera上完美运行)无法在Internet Explorer上正确显示。

背景仍为白色! (我使用的是IE-8)

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;
}

6 个答案:

答案 0 :(得分:53)

作为一个很好的解决方法,jQuery已经将它添加到他们的项目中,并且使用JavaScript实现这一点是可以接受的:

对于我的CSS,我会有

.my_table tr.even{
    background:#E6EDF5;
}

.my_table tr.odd{
    background:#F0F5FA;
}

我会用jQuery来做到这一点:

$(document).ready(function() {
    $(".my_table tr:nth-child(even)").addClass("even");
    $(".my_table tr:nth-child(odd)").addClass("odd");
});

答案 1 :(得分:16)

IE8不支持我担心的nth-child选择器:

http://reference.sitepoint.com/css/pseudoclass-nthchild

答案 2 :(得分:5)

这是一个IE8(和以前的IE版本)问题,这个链接显示了一个很好的修复:

http://verboselogging.com/2010/01/17/making-nth-child-work-everywhere

答案 3 :(得分:2)

您可以使用first-child和“+”来模拟nth-child,例如:

tr > td:first-child + td + td + td + td + td + td + td + td {
    background-color: red;
}

选择第9列,就像nth-child(9)一样,适用于IE

答案 4 :(得分:1)

这是Dojo版本,它运行正常:

  dojo.addOnLoad(function(){
      dojo.query("table tr:nth-child(odd)").addClass("odd");
      dojo.query("table tr:nth-child(even)").addClass("even");
  });

答案 5 :(得分:1)

我前段时间,为这个问题提供了一个简单的简单javascript解决方案:

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;
};

用法非常简单,类似于css-selector:

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';

http://jsfiddle.net/ARTsinn/s3KLz/