我正在使用select2 小部件,我需要显示格式为 html 的搜索结果。
所以我这样使用它:
function formatMyItem(myItem) {
return defaultEscapeMarkup(myItem.someDescription) + " <strong>(" + myItem.someOtherValue + ")</strong>";
}
function defaultEscapeMarkup(markup) {
var replace_map = {
'\\': '\',
'&': '&',
'<': '<',
'>': '>',
'"': '"',
"'": ''',
"/": '/'
};
return String(markup).replace(/[&<>"'\/\\]/g, function (match) {
return replace_map[match];
});
}
var suggestionValues = [];
for (var i = 0; i < myData.length; i++) {
var myItem = myData[i];
suggestionValues.push({
id: myItem.someKey,
text: formatMyItem(myItem)
});
}
$mySelect.select2({
width: 'resolve',
multiple: true,
data: suggestionValues,
escapeMarkup: function(m) {
// Do not escape HTML in the select options text
return m;
}
});
但是现在当用户搜索某些内容时,该词会在选项的 HTML 中搜索。
例如,如果用户搜索“strong”(假设某些描述可以包含“strong”一词),那么 select2 将建议所有值(因为它们都包含“strong”)。
此外,当用户搜索“<”(假设某些描述包含数学符号)时,select2 将返回所有值(因为它们都包含 html 标签),但不会突出显示描述中实际的“小于”符号, 因为它们实际上已被转换为“& lt;”。
如何使 select2 不在 html 标签内搜索?