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

Selectize仅匹配开头字符,与官网示例不符,如何改为包含匹配?

为什么Selectize只显示前缀匹配的选项,而非包含匹配?

问题原因

你使用的Selectize 0.15.2版本默认采用前缀匹配规则——仅显示以输入字符串开头的选项;而官网示例要么使用了更新的版本,要么自定义了匹配逻辑,因此表现出包含匹配的效果。

解决方法

要实现包含任意位置字符串的匹配,你可以通过自定义Selectize的匹配逻辑来完成,以下是两种可行方案:

方案1:自定义match函数

初始化Selectize时,传入自定义的match函数,让它检查选项文本是否包含输入的过滤字符串(不区分大小写):

$('#normalize').selectize({
    match: function(text, filter) {
        // 将文本和过滤字符串都转为小写,实现不区分大小写的包含匹配
        return text.toLowerCase().indexOf(filter.toLowerCase()) !== -1;
    }
});

方案2:自定义评分函数(保留前缀匹配优先级)

如果你希望优先展示前缀匹配的选项,同时补充包含匹配的结果,可以自定义score函数:

$('#normalize').selectize({
    score: function(search) {
        var originalScore = this.getScoreFunction(search);
        return function(item) {
            // 先使用默认的前缀匹配评分,无匹配则检查是否包含目标字符串
            var score = originalScore(item);
            if (score === 0) {
                return item.text.toLowerCase().indexOf(search.toLowerCase()) !== -1 ? 0.5 : 0;
            }
            return score;
        };
    }
});

修改后的完整代码

<!DOCTYPE html>
<html lang="es">
    <head>
        <meta charset="utf-8">
        <title> TEST</title>
        <script src="https://code.jquery.com/jquery-3.6.3.min.js" integrity="sha256-pvPw+upLPUjgMXY0G+8O0xUf+/Im1MZjXxxgOcBQBXU=" crossorigin="anonymous"></script>
        <link
          rel="stylesheet"
          href="https://cdnjs.cloudflare.com/ajax/libs/selectize.js/0.15.2/css/selectize.default.min.css"
          integrity="sha512-pTaEn+6gF1IeWv3W1+7X7eM60TFu/agjgoHmYhAfLEU8Phuf6JKiiE8YmsNC0aCgQv4192s4Vai8YZ6VNM6vyQ=="
          crossorigin="anonymous"
          referrerpolicy="no-referrer"
        />
        <script
          src="https://cdnjs.cloudflare.com/ajax/libs/selectize.js/0.15.2/js/selectize.min.js"
          integrity="sha512-IOebNkvA/HZjMM7MxL0NYeLYEalloZ8ckak+NDtOViP7oiYzG5vn6WVXyrJDiJPhl4yRdmNAG49iuLmhkUdVsQ=="
          crossorigin="anonymous"
          referrerpolicy="no-referrer"
        ></script>
    </head>
    <body>
      <select id="normalize">
        <option value=""></option>
        <option value="1">Awesome</option>
        <option value="2">Beast</option>
        <option value="3">Compatible</option>
        <option value="4">Thomas Edison</option>
        <option value="5">Nikola</option>
        <option value="6">Selectize</option>
        <option value="7">Javascript</option>
      </select>
      <script>
      $('#normalize').selectize({
          match: function(text, filter) {
              return text.toLowerCase().indexOf(filter.toLowerCase()) !== -1;
          }
      });
      </script> 
    </body>
</html>

效果对比

你的原有效果:
My Test

修改后效果(与官网示例一致):
Selectize Web page

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 20:05:39