【问题标题】:Select2: Extend matcher for tag dataSelect2:为标签数据扩展匹配器
【发布时间】:2013-02-10 20:11:05
【问题描述】:

我使用Select2 进行标记。它就像一个魅力,但我有一个额外的要求:匹配器应该匹配的不仅仅是项目的文本。

让我解释一下。 matcher 函数有两个参数,termtext。这允许我们比较给定的标签和输入的文本。但是,如果我为每个标签定义附加数据(通过tags 函数),我将无法在匹配器中访问它。

示例代码:

// #myinput is a hidden input field
$('#myinput').select2({
  matcher: function(term, text) {
      return text.toUpperCase().indexOf(term.toUpperCase()) >= 0;
  },
  tags: function() {
      var tags = [];
      $('#myselect').find('option').each(function(index, option) {
          option = $(option);
          tags.push({
              id: option.val(),
              text: option.text(),
              category: option.data('category')
          });
      });
      return tags;
  }
})

我为每个标签设置了强制的idtext 属性。此外,还有一个名为category 的字符串。我想匹配文本和类别,而不仅仅是文本。

这可能吗?

【问题讨论】:

    标签: javascript jquery tags jquery-select2


    【解决方案1】:

    这目前是不可能的(从 3.3 开始),请在 select2 的 github 问题跟踪器中使用 jsfiddle 提交增强请求。

    【讨论】:

    • 应该像将整个标签数据对象而不是 data.text 传递给匹配器一样简单(可能作为附加参数以保持向后兼容性)
    【解决方案2】:

    使用 3.4.2,仍未实现。但是确实有很简单的hack

    在 select2.(min).js 中找到 matcher 被 2 个参数调用的行 ("e.matcher(");

    在我的版本中,我有这样的东西:

    {var a=this.text!==b,c=a?this.text:this;(""===f||e.matcher(f,c) 
    

    将“this”添加到第三个参数

    e.matcher(f,c,this);

    结果,整个标签对象将被传递:)

    【讨论】:

      猜你喜欢
      • 2011-07-05
      • 1970-01-01
      • 2012-09-20
      • 2021-06-12
      • 1970-01-01
      • 1970-01-01
      • 2019-09-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多