我使用Select2进行标记。它就像一个魅力,但我有一个额外的要求:匹配器应该匹配的不仅仅是项目的文本。
让我解释一下。 matcher
函数有两个参数term
和text
。这允许我们比较给定的标签和输入的文本。但如果我为每个标签定义了额外的数据(通过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;
}
})
我为每个代码设置了必需的id
和text
属性。此外,还有一个名为category
的字符串。我希望匹配文本和类别而不是文本。
这可能吗?
答案 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,这一点);
结果,整个标记对象将被传递:)