3

我正在尝试在 Select2 v4 下拉项目中显示 fontawesome 图标。但是下拉菜单显示的是 html 而不是生成实际的图标。此方法适用于 select2 V3,但似乎不适用于 v4。任何帮助表示赞赏。谢谢

HTML

<div class="select2-wrapper">
    <select class="input icons_select2">
        <option value="fa-dribbble" data-icon="fa-dribbble">Dribbble</option>
        <option value="fa-dropbox" data-icon="fa-dropbox">Dropbox</option>
        <option value="fa-facebook" data-icon="fa-facebook">Facebook</option>
    </select>
</div>

JS

function iformat(icon) {
var originalOption = icon.element;
return '<i class="fa ' + $(originalOption).data('icon') + '"></i> ' + icon.text;
}
$('.icons_select2').select2({
width: "100%",
templateSelection: iformat,
templateResult: iformat
});

参见小提琴的例子:http: //jsfiddle.net/qCn6p/206/

4

4 回答 4

10

这是你更新的小提琴

您必须像这样将元素包装在 jquery 中:

function iformat(icon) {
    var originalOption = icon.element;
    return $('<span><i class="fa ' + $(originalOption).data('icon') + '"></i> ' + icon.text + '</span>');
}
$('.icons_select2').select2({
    width: "100%",
    templateSelection: iformat,
    templateResult: iformat,
    allowHtml: true
});
于 2017-02-01T14:02:26.533 回答
4

使用“escapeMarkup”选项如下

$('.icons_select2').select2({
    width: "100%",
    templateSelection: iformat,
    templateResult: iformat,
    escapeMarkup: function(m) {
        return m;
     }
});

http://jsfiddle.net/qCn6p/209/

于 2017-02-01T14:18:40.553 回答
0

您可以用$.parseHTML().

例子:return $.parseHTML('<i class="fa ' + $(originalOption).data('icon') + '"></i> ' + icon.text);

于 2017-02-01T13:56:54.610 回答
0

仅供参考,如果您为 templateSelection/templateResult 覆盖函数返回一个字符串,它将被转义(除非您还覆盖了 escapeMarkup 函数),但是如果您返回一个 jquery 对象,它将不会被转义。

一些示例还忽略了没有和 id 的格式化输入

if (!icon.id) { return icon.text; }

看到这个小提琴http://jsfiddle.net/dleffler/15myta6t/3/

于 2017-12-21T17:38:42.117 回答