Select2 добавить значок изображения в опцию динамически

Это то, что select2.github.io дает вам:

function addIcons(opt) {
    if (!opt.id) {
        return opt.text;
    }
    var $opt = $(
            '<span><img src="/images/flags/' + opt.element.value.toLowerCase() + '.png" class="img-flag" /> ' + opt.text + '</span>'
            );
    return $opt;
}

Я хотел бы добавить атрибут data-image в мои параметры:

<option value="flag" data-image="/images/flags/flag.png">Country 1</option>

и запишите его в функцию:

function addIcons(opt) {
    if (!opt.id) {
        return opt.text;
    }

    var optimage = opt.attr('data-image');
    var $opt = $(
            '<span><img src="/images/flags/' + optimage + '" class="img-flag" /> ' + opt.text + '</span>'
            );
    return $opt;
}

К сожалению, простой console.log(opt); ничего не возвращает в функции, поэтому я не вижу, могу ли я получить доступ к своему атрибуту data-image. Вышеупомянутый блок кода возвращает ошибку, поэтому это явно не работает. Любые предложения по этому вопросу?

Ответ 1

Если оптимизатор возвращает "undefined", попробуйте мой образец: его работоспособность:

$("#selectUserForChat").select2({
		templateResult: addUserPic,
        templateSelection: addUserPic
});
	
function addUserPic (opt) {
	if (!opt.id) {
		return opt.text;
	}               
	var optimage = $(opt.element).data('image'); 
	if(!optimage){
		return opt.text;
	} else {
		var $opt = $(
		'<span class="userName"><img src="' + optimage + '" class="userPic" /> ' + $(opt.element).text() + '</span>'
		);
		return $opt;
	}
};

Ответ 2

Я решил проблему с этим кодом: var optimage = $(opt.element).data('image');

$(".category").select2({
            templateResult: formatState,
            templateSelection: formatState
        });
        function formatState (opt) {
            if (!opt.id) {
                return opt.text;
            }               
            var optimage = $(opt.element).data('image'); 
            if(!optimage){
                return opt.text;
            } else {                    
                var $opt = $(
                    '<span><img src="' + optimage + '" width="23px" /> ' + opt.text + '</span>'
                );
                return $opt;
            }

        };

Ответ 3

Попробуйте следующее:

var optimage = $(opt).data('image'); //or $(opt).attr('data-image')
var $opt = $(
    '<span><img src="' + optimage + '" class="img-flag" /> ' + $(opt).text() + '</span>'
);