Select2:扩展标记数据的匹配器

时间:2013-02-10 20:11:05

标签: javascript jquery tags jquery-select2

我使用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的字符串。我希望匹配文本和类别而不是文本。

这可能吗?

2 个答案:

答案 0 :(得分:1)

这是目前无法实现的(截至3.3),在select2的github问题跟踪器中使用jsfiddle提交增强请求。

答案 1 :(得分:0)

使用3.4.2,仍然没有实现。真的,非常简单 hack

在select2。(min).js中查找使用2个args调用匹配器的行(“ e.matcher(”);

在我的版本上,我有类似的东西:

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

将“this”添加到第三个arg

  

e.matcher(F,C,这一点);

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