IE: nth-child() using odd/even isn't working

前端 未结 5 1572
你的背包
你的背包 2020-12-13 19:56

My table (that works perfectly on Chrome, FireFox and Opera) is not displaying correctly on Internet Explorer.

The background remains white! (I am using IE-8)

<
相关标签:
5条回答
  • 2020-12-13 19:58

    As a good workaround, jQuery has added this to their project and achieving this using JavaScript is acceptable:

    For my CSS, I would have

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

    And I would use jQuery to do this:

    $(document).ready(function() {
        $(".my_table tr:nth-child(even)").addClass("even");
        $(".my_table tr:nth-child(odd)").addClass("odd");
    });
    
    0 讨论(0)
  • 2020-12-13 19:58

    You can use first-child and "+" to emulate nth-child, example:

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

    That select the 9th column, just like nth-child(9), and that works on IE

    0 讨论(0)
  • 2020-12-13 19:59

    I made some time ago, a prude simple javascript solution for this problem:

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

    The usage is quite simple and similar to the 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/

    0 讨论(0)
  • 2020-12-13 20:04

    This is the Dojo version, it works fine:

      dojo.addOnLoad(function(){
          dojo.query("table tr:nth-child(odd)").addClass("odd");
          dojo.query("table tr:nth-child(even)").addClass("even");
      });
    
    0 讨论(0)
  • 2020-12-13 20:09

    IE8 doesn't support the nth-child selector I'm afraid:

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

    0 讨论(0)
提交回复
热议问题