Я использую select2 widget, и мне нужно отобразить результаты поиска в формате html.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 опции.
Например, если пользователь ищет «сильный» (при условии, что некоторые описания могут содержать слово «сильный»), тогда select2 предложит все значения (потому что все они содержат «сильные»).
Кроме того, когда пользователь ищет «<» (при условии, что некоторые описания содержат математические символы), то select2 вернет все значения (поскольку все они содержат html-теги), но не будет выделять фактическое значение «меньше», символ в описаниях, потому что они были фактически преобразованы в «& lt;».
Как я могу сделать select2 не искать внутри тегов html?