首页 > 解决方案 > 为 for 循环中的选项项目提供颜色

问题描述

在我的 ajax 成功中,我有 4 个值value.BookableResourceId,value.Name,value.FontColor,value.BackgroundColor。我的要求是在创建具有名称和 BookableResourceId 的选项时添加 FontColor 和 BackgroundColor 以显示具有相应字体和背景颜色的项目。

$(resourceElement).select2({
    data: resourceData,
    closeOnSelect: true,
    placeholder: '(Empty)',
    allowClear: true,
}).on('select2:open', function (e) { 
        $.ajax({
            url: '/XX/YYY',
            type: "POST",
            async: false,
            success: function (response) {
                  for (var data in response) {                    
                      var newOption = new Option(response[data].Name, response[data].BookableResourceId, false, false);                                          
                      $(resourceElement).append(newOption).trigger('change');  
                  }

下面显示了ajax响应:

在此处输入图像描述

我试过下面的代码。但它也使数据填充失败。

var add_Helpresrs = [];
$.each(response, function (index, value) {
                        add_Helpresrs.push(
                            {
                                id: value.BookableResourceId,
                                text: value.Name,
                                color: value.FontColor,
                                background: value.BackgroundColor
                            });
                    });

var newArray = [];
add_Helpresrs.map(function (item) {
                        newArray.push({
                            id: item.id,
                            text: '<span style="color:' + item.color + '; background:' + item.background + '">' + item.text + '</span>'
                        })
                    })
$(resourceElement).append(newArray).trigger('change');

标签: javascriptc#jquery

解决方案


只需将颜色和背景颜色添加到响应中的新选项:

const response = [{
  Name: 'bob',
  BookableResourceId: 'bob\'s book',
  FontColor: 'red',
  BackgroundColor: 'blue'
}, {
  Name: 'Steve',
  BookableResourceId: 'steve\'s book',
  FontColor: 'green',
  BackgroundColor: 'orange'
}];

const select = document.querySelector('select');

response.forEach(book => {
  var newOption = new Option(book.Name, book.BookableResourceId, false, false);

  newOption.style.color = book.FontColor;
  newOption.style.backgroundColor = book.BackgroundColor;

  select.appendChild(newOption);
});
<select>
  <option>-----</option>
</select>


推荐阅读