如何在 select2 数据行的一行中显示多个白色 space 字符?

How can I show more than one white space character in a row in a select2 data row?

我正在使用 Select2 并且我使用 {data: [{id:1, text: "..."}] 方法来定义选项。我想通过对由多个白色 space 字符组成的子字符串进行分组来格式化每个选项。所以像这样:

{data: [
    {id:1, text: "Trees     -     Oak"},
    {id:2, text: "Trees     -     Pine"},
    {id:3, text: "Seas      -     North Sea"},
    {id:4, text: "Seas      -     Baltic Sea"}
]}

当我这样做时,它们在结果下拉列表中显示为一个 space(处理 space 的默认 HTML 方式)。当我使用   而不是 space 时,它们在下拉列表中显示为字符串“ ”,而不是 spaces.

{data: [
    {id:1, text: "Trees   -   Oak"},
    {id:2, text: "Trees   -   Pine"},
    {id:3, text: "Seas   -   North Sea"},
    {id:4, text: "Seas   -   Baltic Sea"}
]}

有没有办法保留我在数据项的 text 属性中定义的所有 space?

您不想使用 optgroups 吗?

{data: [
  {
    text: "Trees",
    children: [
      {id:1, text: "Oak"},
      {id:2, text: "Pine"},
    ]
  },
  {
    text: "Seas",
    children: [
      {id:1, text: "North Sea"},
      {id:2, text: "Baltic Sea"},
    ]
  },
]}

或尝试添加

white-space: pre;

在 select 的 css-class 项中保留字符串中的所有空格。

正如 koenpeters 在评论中所说,默认主题 css 将如下所示:

.select2-container--default .select2-results__option {
  white-space: pre;
}

Yuri Gor 给出的答案的替代方法是使用   并在 select2 创建中包含 escapeMarkup

$("#isOfTheSelectNode").select2({
    escapeMarkup: function (m) { return m; }
});

缺点是:

    html 标记的
  • None 将被转义,这可能会导致奇怪的结果 option 个元素,如果文本包含 HTML。
  • 当您搜索 space 时,将不会匹配包含   的项目。

如果您只想允许多个 space 如此呈现,我认为 Yuri Gor 的回答更好。

white-space: normal;添加到您的风格

.select2-container .select2-selection--multiple .select2-selection__rendered {
    display: inline;
    list-style: none;
    padding: 0;
    white-space: normal;
}