javascript - JQuery <tr> strip 奇数/偶数行

标签 javascript jquery css

快速的 JQuery 问题,我有一个用户可以过滤的产品页面。每次应用/删除过滤器时,更改事件都会调用 stripeTable() 。我尝试使用以下函数实现表条纹,但是在删除元素并调用 stripTable() 后,条纹并没有保持一致,即每个可见的奇数行一种颜色,每个可见的偶数行另一种颜色。

function stripeTable() {
    // Find all odd visible table rows and add .odd class.
    $("#resultsTable > tbody > tr:even:visible").each(function() {
       $(this).addClass('even');
    });
    // Find all even visible table rows and add .even class.
    $("#resultsTable > tbody > tr:odd:visible").each(function() {
       $(this).addClass('odd');
    });
}

我不明白为什么上面的方法不起作用。我成功地实现了如下功能并且运行良好。有什么想法吗?

function stripeTable() {
    var count = 1;
    // get all visible table rows 
    $("#resultsTable > tbody > tr").each(function () {
        // If table row is visible, strip accordingly.
        // Row 0 (table headers) not striped.
        if ($(this).is(":visible") && (this.rowIndex !== 0)) {
            if ((count % 2) != 0) {
                // Remove class .even if applied previously
                $(this).removeClass("even");
                // Odd row, add class .odd
                $(this).addClass("odd");
                count++;
            } else {
                // Remove class .odd if applied previously
                $(this).removeClass("odd");
                // Even row, add class .even
                $(this).addClass("even");
                count++;
            }
        }
    });
}

为了清楚起见,stripeTable() 是最后调用的函数,表格行预先隐藏/显示在表格中。谢谢。

最佳答案

伪选择器的顺序很重要。

// Computes "even" first, then "visible"
"#resultsTable > tbody > tr:even:visible"

// Compute "visible" first, then "even"
"#resultsTable > tbody > tr:visible:even"

<强> Example Fiddle

关于javascript - JQuery <tr> strip 奇数/偶数行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36019387/

相关文章:

javascript - 使用 Angular7/firebase 对数组中的数据进行排序

javascript - D3 节点更新 - 如何在多个文本元素中选择一个特定的文本元素?

javascript - 通过 http 请求加载的元素的 Angular 单击事件不起作用

jquery - 在 HTML 中指定图像的宽度和高度

css - 如果组件被破坏,如何删除特定的 scss?

javascript - 如何在 jQuery 日期选择器中禁用今天之前的日期

javascript - 有没有办法通过 JavaScript 从 innerText 创建单个单词的数组?

jquery - 如何在悬停时显示子菜单下拉菜单

menu - IE7下拉菜单一直消失,菜单项被图片覆盖

html - 缩放 flexbox 高度以适合图像 div