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

如何在SyncFusion EJS MultiSelect控件中实现通配符搜索功能?

实现SyncFusion EJS MultiSelect通配符搜索

可以通过自定义filtering事件逻辑来实现通配符搜索,核心是替换默认过滤规则,解析用户输入的通配符并完成匹配。以下是具体实现步骤:

  • 利用控件的filtering事件拦截默认过滤行为,手动处理通配符匹配
  • 根据搜索词中的通配符(比如*)构造正则规则,过滤数据源
  • 将过滤后的结果更新到控件的下拉列表

具体代码实现

首先编写onfiltering事件处理函数:

function onfiltering(e) {
    // 阻止默认过滤逻辑
    e.preventDefault();
    const searchText = e.text.trim();
    let result = [];

    if (searchText) {
        let matchRule;
        // 处理以*结尾的通配符(匹配前缀)
        if (searchText.endsWith('*')) {
            const prefix = searchText.slice(0, -1);
            // 构造不区分大小写的前缀匹配正则
            matchRule = new RegExp(`^${prefix}`, 'i');
        } else {
            // 无通配符时默认使用包含匹配(可按需调整)
            matchRule = new RegExp(searchText, 'i');
        }

        // 过滤数据源,替换item.Text为你实际的显示字段名
        result = e.dataSource.filter(item => matchRule.test(item.Text));
    } else {
        // 搜索词为空时返回全部数据
        result = e.dataSource;
    }

    // 更新控件下拉列表数据
    e.updateData(result);
}

控件代码调整(结合你的现有代码)

确保设置好对应的显示字段和值字段:

<ejs-multiselect id="test" 
                 dataSource="@Model.testGroup" 
                 value="@Model.test" 
                 mode="Box" 
                 allowFiltering="true" 
                 change="onchange" 
                 filtering="onfiltering"
                 displayField="Text" <!-- 替换为你实际用来显示的字段 -->
                 valueField="Value"> <!-- 替换为对应的值字段 -->
</ejs-multiselect>

注意事项

  • 代码中的item.Text需要替换成你控件实际绑定的显示字段名称
  • 如果需要支持更多通配符规则(比如*在中间、?匹配单个字符),可以扩展正则的构造逻辑
  • 保持控件的allowFiltering属性为true,确保过滤功能启用

内容的提问来源于stack exchange,提问作者Pavithran R

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 21:00:54