从 Select2 3.5.2 迁移到 Select2 4.0.0 时,我强烈建议您阅读发行说明和4.0 发行公告。
使用 3.5.2 版,我可以在搜索数据时重现下划线匹配(使用 formatSelection 和 query.term).. 知道如何使用 v4.0.0 进行匹配(函数 templateResult 只传递“结果”而不是“查询” ?
这在 4.0 中被删除了,因为结果已经从查询中分离出来,所以继续传递信息是没有意义的。当然,这并不意味着您无法获取查询并存储它。您需要做的就是存储查询,类似以下的内容可能会起作用
var query = {};
var $element = $('#my-happy-select');
function markMatch (text, term) {
// Find where the match is
var match = text.toUpperCase().indexOf(term.toUpperCase());
var $result = $('<span></span>');
// If there is no match, move on
if (match < 0) {
return $result.text(text);
}
// Put in whatever text is before the match
$result.text(text.substring(0, match));
// Mark the match
var $match = $('<span class="select2-rendered__match"></span>');
$match.text(text.substring(match, match + term.length));
// Append the matching text
$result.append($match);
// Put in whatever is after the match
$result.append(text.substring(match + term.length));
return $result;
}
$element.select2({
templateResult: function (item) {
// No need to template the searching text
if (item.loading) {
return item.text;
}
var term = query.term || '';
var $result = markMatch(item.text, term);
return $result;
},
language: {
searching: function (params) {
// Intercept the query as it is happening
query = params;
// Change this to be appropriate for your application
return 'Searching…';
}
}
});
在 3.x 版中,您可以使用列表中没有的搜索值添加免费条目(使用 createSearchChoice)。V4.0没有这个选项,知道如何重新制作吗?
这仍然可以在 4.0 中使用tags
选项(将其设置为true
)来完成。如果要自定义标签,可以使用createTag
(类似于createSearchChoice
)。
var $element = $('#my-happy-select');
$element.select2({
createTag: function (query) {
return {
id: query.term,
text: query.term,
tag: true
}
},
tags: true
});