javascript - 在 Kendo Grid 中更改过滤列标题的颜色

标签 javascript css kendo-ui kendo-grid

我正在做一个使用 Kendo 控件的元素,我正在使用一个 Kendo 网格。我的要求是当我对一列应用过滤时,我想更改过滤后的列标题的颜色。我的剑道格子代码是:

    var grid = $("#grid").kendoGrid({
        dataSource: {
            type           : "odata",
            transport      : {
                read: "http://demos.kendoui.com/service/Northwind.svc/Orders"
            },
            schema         : {
                model: {
                    fields: {
                        OrderID  : { type: "number" },
                        Freight  : { type: "number" },
                        ShipName : { type: "string" },
                        OrderDate: { type: "date" },
                        ShipCity : { type: "string" }
                    }
                }
            },
            pageSize       : 10
        },
        filterable: true,
        sortable  : true,
        pageable  : true,
        columns   : [
            {
                field     : "OrderID",
                filterable: false
            },
            "Freight",
            {
                field : "OrderDate",
                title : "Order Date",
                width : 100,
                format: "{0:MM/dd/yyyy}"
            },
            {
                field: "ShipName",
                title: "Ship Name",
                width: 200
            },
            {
                field: "ShipCity",
                title: "Ship City"
            }
        ]
    }).data("kendoGrid");

最佳答案

当您过滤网格时,过滤器图标实际上会改变颜色,但您希望整个标题都改变?

我在网格上看不到任何允许您指定此事件或您可以 Hook 的任何过滤器事件的配置,但这并不意味着不可能。

查看网格中发生的情况,当您过滤列时,一个额外的类 .k-state-active 被添加到列标题中的过滤器图标。我们可以应用一些 CSS 来很容易地更改该类的背景颜色,但是它不适用于整个标题(父 TH 元素)并且 CSS 中没有父选择器。

我认为,为了做到这一点,您可能必须覆盖 Kendo FilterMenu 小部件的刷新功能,方法是将其替换为您自己的函数,然后调用原始函数。完成此操作后,您可以扩展 FilterMenu 以将附加类添加到整个 header 。

// Grab old refresh function
var filterMenu = kendo.ui.FilterMenu.fn;
filterMenu.oldRefresh = filterMenu.refresh;

// Replace it with our own
filterMenu.refresh = function () {
   filterMenu.oldRefresh.apply(this, arguments);

   // Add an additional class to the column header
   if (this.link.hasClass('k-state-active')) {
      this.link.parent().addClass('k-state-active');
   } else {
      this.link.parent().removeClass('k-state-active');
   }
};

然后您可以使用 CSS 调整网格标题中 .k-state-active 的背景颜色。

#grid thead .k-state-active {
  background-color: crimson;
}

您可以在实际中看到它 here

关于javascript - 在 Kendo Grid 中更改过滤列标题的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15401360/

相关文章:

javascript - 为什么 Kendo UI destroy 方法会删除所有子部件?

javascript - 从函数调用时,Kendo 模板显示原始 html

javascript - 为什么 Alert 函数的执行速度比 javascript 中的任何其他函数都快?

javascript date to string() 对我不起作用,甚至在 w3schools 示例中也不起作用

javascript - 如果用户拒绝在 onbeforeunload 事件中离开页面,之后是否会触发一个事件?

javascript - 使用页面上的专用按钮复制的文本包含大量空格

css - 用 div 中的列包装文本

javascript - 是否可以在 SJCL 中使用 bcrypt 或 scrypt 作为 PBKDF2 的替代品?

css - SASS中有没有办法动态地为文件之间的变量赋值

javascript - (kendoUI 图表)可以通过调整窗口大小来重排它的大小吗?