选择2动态添加图像图标到选项

War*_*sse 16 jquery jquery-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;
}
Run Code Online (Sandbox Code Playgroud)

我想在我的选项中添加数据图像属性:

<option value="flag" data-image="/images/flags/flag.png">Country 1</option>
Run Code Online (Sandbox Code Playgroud)

并将其记录在函数中:

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;
}
Run Code Online (Sandbox Code Playgroud)

可悲的是,一个简单的console.log(opt); 不会返回函数中的任何内容,因此我无法查看是否可以访问我的数据图像属性.上面的代码块返回一个错误,所以这显然不起作用.对此事有何建议?

小智 13

如果optimage返回"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;
	}
};
Run Code Online (Sandbox Code Playgroud)


JHO*_*CHE 8

已解决,attr并在Select2 4.0.6-rc.0上进行了测试。

$(".class").select2({
    templateResult: formatState,
    templateSelection: formatState
});

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

    var optimage = $(opt.element).attr('data-image'); 
    console.log(optimage)
    if(!optimage){
       return opt.text.toUpperCase();
    } else {                    
        var $opt = $(
           '<span><img src="' + optimage + '" width="60px" /> ' + opt.text.toUpperCase() + '</span>'
        );
        return $opt;
    }
};
Run Code Online (Sandbox Code Playgroud)


小智 6

我解决了这段代码的问题: 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;
            }

        };
Run Code Online (Sandbox Code Playgroud)