You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Guriddo jqGrid多选过滤器含逗号数据过滤问题

解决Guriddo jqGrid v5.8.5自定义多选过滤器分隔符问题

问题背景

需在Guriddo jqGrid中使用多选过滤器,但部分字段数据包含逗号,因此需要将多选筛选的分隔符改为';',键值分隔符改为':'。该功能在Free jqGrid中可通过inFilterSeparator配置实现,但Guriddo jqGrid v5.8.5无此配置项,需自定义处理。

解决方案

1. 单列自定义筛选规则

针对需要特殊处理的列,在colModel中配置自定义筛选逻辑,解析以';'分隔的选中值,同时处理':'分隔的键值对:

colModel: [
    // 其他列配置...
    {
        name: "targetField",
        label: "目标字段",
        width: 200,
        filtertype: "custom",
        filteroptions: {
            customSearch: function (filterValue) {
                // 按';'拆分筛选值,解析':'分隔的键值对,提取实际匹配值
                var matchValues = filterValue.split(';').map(item => {
                    let parts = item.split(':');
                    return parts.length > 1 ? parts[1].trim() : item.trim();
                }).filter(val => val);

                // 构造OR逻辑的筛选规则
                return {
                    groupOp: "OR",
                    rules: matchValues.map(val => ({ op: "eq", data: val }))
                };
            },
            customFcn: function (elem) {
                // 初始化多选控件,配置分隔符为';'
                $(elem).multiselect({
                    separator: ';',
                    nonSelectedText: '请选择',
                    onChange: () => $(elem).trigger('change')
                });
            }
        }
    }
    // 其他列配置...
]

2. 全局重写筛选分隔符

如果需要所有多选筛选都生效,可重写Guriddo jqGrid的parseInFilter方法,替换默认逗号分隔符为';':

// 重写全局解析多选筛选值的方法
$.jgrid.parseInFilter = function (filterStr) {
    if (!filterStr) return [];
    return filterStr.split(';').map(item => {
        let parts = item.split(':');
        return parts.length > 1 ? parts[1].trim() : item.trim();
    }).filter(val => val);
};

注意事项

  • 若使用第三方多选插件(如select2),需同步将插件的选中值分隔符配置为';',避免和字段内的逗号冲突。
  • 若采用远程筛选,需确保后端服务能识别';'分隔的筛选值,对应调整后端逻辑。

内容的提问来源于stack exchange,提问作者Dhirendra Medsing

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 19:22:35