【问题标题】:html color to alternative rows of dynamic tablehtml颜色到动态表的替代行
【发布时间】:2012-07-16 14:34:49
【问题描述】:

我有一个动态表,我想在替代行上赋予颜色。我怎样才能用css实现这一点?我需要代码才能在 IE7+ 中工作

【问题讨论】:

  • 您使用哪种语言/框架?
  • 在 JSP 中..我正在迭代动态表..
  • 除了 jquery 解决方案之外,给出的答案都不适用于 ie8。即便如此,也需要注意它不适用于动态加载的内容,除非您做更多的工作并在加载内容后触发这两个语句
  • 我用的是IE 7...如何处理?

标签: html css jsp


【解决方案1】:

研究在 CSS3 中使用偶数/奇数规则。

参考https://developer.mozilla.org/en/CSS/:nth-child

例如,

tr:nth-child(odd) 将代表每个 2n + 1 孩子的 CSS,而 tr:nth-child(even) 将代表每个 2n 孩子的 CSS。

【讨论】:

    【解决方案2】:

    我周五遇到了同样的问题,我使用了jquery解决方案

    $("tr:even").css("background-color", "#CCC");
    $("tr:odd").css("background-color", "#FFF");
    

    所以基本上你在头部添加 .js 脚本并在 dom 更改时触发 jquery 规则。

    我完成的 .js 看起来像这样

    <script type="text/javascript">
        (function (window) {
    
            var last = +new Date();
            var delay = 100; // default delay
    
            // Manage event queue
            var stack = [];
    
            function callback() {
                var now = +new Date();
                if (now - last > delay) {
                    for (var i = 0; i < stack.length; i++) {
                        stack[i]();
                    }
                    last = now;
                }
            }
    
            // Public interface
            var onDomChange = function (fn, newdelay) {
                if (newdelay)
                    delay = newdelay;
                stack.push(fn);
            };
    
            // Naive approach for compatibility
            function naive() {
    
                var last = document.getElementsByTagName('*');
                var lastlen = last.length;
                var timer = setTimeout(function check() {
    
                    // get current state of the document
                    var current = document.getElementsByTagName('*');
                    var len = current.length;
    
                    // if the length is different
                    // it's fairly obvious
                    if (len != lastlen) {
                        // just make sure the loop finishes early
                        last = [];
                    }
    
                    // go check every element in order
                    for (var i = 0; i < len; i++) {
                        if (current[i] !== last[i]) {
                            callback();
                            last = current;
                            lastlen = len;
                            break;
                        }
                    }
    
                    // over, and over, and over again
                    setTimeout(check, delay);
    
                }, delay);
            }
    
            //
            //  Check for mutation events support
            //
    
            var support = {};
    
            var el = document.documentElement;
            var remain = 3;
    
            // callback for the tests
            function decide() {
                if (support.DOMNodeInserted) {
                    window.addEventListener("DOMContentLoaded", function () {
                        if (support.DOMSubtreeModified) { // for FF 3+, Chrome
                            el.addEventListener('DOMSubtreeModified', callback, false);
                        } else { // for FF 2, Safari, Opera 9.6+
                            el.addEventListener('DOMNodeInserted', callback, false);
                            el.addEventListener('DOMNodeRemoved', callback, false);
                        }
                    }, false);
                } else if (document.onpropertychange) { // for IE 5.5+
                    document.onpropertychange = callback;
                } else { // fallback
                    naive();
                }
            }
    
            // checks a particular event
            function test(event) {
                el.addEventListener(event, function fn() {
                    support[event] = true;
                    el.removeEventListener(event, fn, false);
                    if (--remain === 0) decide();
                }, false);
            }
    
            // attach test events
            if (window.addEventListener) {
                test('DOMSubtreeModified');
                test('DOMNodeInserted');
                test('DOMNodeRemoved');
            } else {
                decide();
            }
    
            // do the dummy test
            var dummy = document.createElement("div");
            el.appendChild(dummy);
            el.removeChild(dummy);
    
            // expose
            window.onDomChange = onDomChange;
    
        })(window);
    
    
    
        $(document).ready(function () {
            $("tr:even").css("background-color", "#CCC");
            $("tr:odd").css("background-color", "#FFF");
            onDomChange(function () {
                $("tr:even").css("background-color", "#CCC");
                $("tr:odd").css("background-color", "#FFF");
            });
        });
    </script>    
    

    我想提醒这个答案,这可能不是最好的解决方案,但可以满足我的需要。 :-)

    【讨论】:

    • 嗨 Nicholas,这里的消息是 id?如何在html中用table定义?
    【解决方案3】:

    CSS3 nth-child 选择器:

    tr:nth-child(odd) {
      background: red /* or whatever */;
    }
    

    【讨论】:

      【解决方案4】:

      您可以使用CSS3 selector

      tr:nth-child(even) {background: #CCC}
      tr:nth-child(odd) {background: #FFF}
      

      jQuery:

      $("tr:even").css("background-color", "#CCC");
      $("tr:odd").css("background-color", "#FFF");
      

      或在server side 上进行操作。

      【讨论】:

      • 这是类还是id?当有很多桌子时如何使用它?但我只想申请一张桌子..
      • 这适用于所有表格行。您可以为表分配一个类 &lt;table class="striped"&gt; 并在您的 CSS 中使用它:table.striped tr:nth-child(even) {background: #CCC}
      • @Nicholas King 告诉它它不起作用.. 我在我的代码中尝试过。真的不工作..还有其他选择吗?
      • 使用 jQuery 或者在服务器端做。
      • 在jQuery中,如何在你给出的调用语句中添加class或id?
      猜你喜欢
      • 2011-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-02
      • 1970-01-01
      • 2021-08-31
      • 2017-07-14
      • 2011-01-27
      相关资源
      最近更新 更多