Я хотел бы иметь таблицу с таблицей начальной загрузки, где первый столбец всегда сортируется первым, чтобы те же значения были сгруппированы.

< Сильный > Пример

Допустим, теперь он отсортирован по классу, тогда это будет выглядеть так:

| Class | Name  | Day |
|-------|-------|-----|
| 3C    | Ben   | 1   |
| 4A    | Aaron | 2   |
| 4A    | Tom   | 3   |

Когда таблица сортируется по дням, она должна выглядеть так:

| Class | Name  | Day |
|-------|-------|-----|
| 4A    | Aaron | 2   |
| 4A    | Tom   | 3   |
| 3C    | Ben   | 1   |

Проблема в том, что обычно это выглядит так:

| Class | Name  | Day |
|-------|-------|-----|
| 4A    | Aaron | 2   |
| 3C    | Ben   | 1   |
| 4A    | Tom   | 3   |

Я знаю о расширении множественной сортировки, но я только узнал, что, когда один щелчок по столбцу и сдвиг щелкают по другому столбцу, он будет отсортирован в порядке одного щелчка. Моя проблема в том, что я хочу, чтобы первый столбец всегда сортировался первым, но я еще не выяснил, как это сделать.

2
At Least Vision 22 Фев 2020 в 00:51

2 ответа

Лучший ответ

Я создал огромный обходной путь для моей проблемы, который работает. Несмотря на то, что это не работает для хорошей производительности, и это не лучший способ, но все равно. Вот что я создал на примере:

<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://unpkg.com/bootstrap-table@1.16.0/dist/bootstrap-table.min.css">
<script src="https://unpkg.com/bootstrap-table@1.16.0/dist/bootstrap-table.min.js"></script>
<script src="https://unpkg.com/bootstrap-table@1.16.0/dist/extensions/multiple-sort/bootstrap-table-multiple-sort.js"></script>

<table id="table"
       data-editable="true"
       >
  <thead>
    <tr>
      <th data-field="what">Name</th>
      <th data-field="number" data-sortable="true">ID</th>
      <th data-field="sort" data-sortable="true">Something</th>
    </tr>
  </thead>
</table>

<script>
  var $table = $('#table')
  $(function() {
    var sort = [
      {
        "sortName": "what",
        "sortOrder": "asc"
      }
    ]
    var data = [
      {
        'what': 'Group 1',
        'number': '2',
        'sort': 'something',
      },
      {
        'what': 'Group 2',
        'number': '5',
        'sort': 'no',
      },
      {
        'what': 'Group 1',
        'number': '8',
        'sort': 'ok',
      },
      {
        'what': 'Group 3',
        'number': '1',
        'sort': 'ye',
      }
    ]
    var order = "desc";
    var lastColumn = "";
    $table.bootstrapTable({
      onSort: function(name) {
        if(lastColumn == name) {
          if(order == "desc") {
            order = "asc";
          } else {
            order = "desc";
          }
        } else {
          lastColumn = name;
          order = "desc";
        }
        sort = [
          {
            "sortName": "what",
            "sortOrder": "asc"
          }, 
          {
            "sortName": name,
            "sortOrder": order
          }
        ]
        $table.bootstrapTable('multiSort', sort);
      },
      sortPriority: sort,
      data: data,
    })
  })
</script>

Как это работает?

Таким образом, всякий раз, когда по одной строке щелкают (то есть она сортируется), запускается событие. Теперь, когда событие срабатывает, я выполняю команду, которая устанавливает multiSort-value для таблицы. Этот multiSort всегда позволяет сначала отсортировать первую строку, а затем строку, по которой щелкают. При повторном щелчке по той же строке происходит сортировка в другом направлении. Всякий раз, когда нажимается другая строка, она сортируется со значением по умолчанию, а не с текущей, и можно снова щелкнуть, чтобы снова переключаться между asc и desc.

0
At Least Vision 23 Фев 2020 в 13:42

Были ли у вас какие-либо успехи в попытке использовать загрузочный плагин Bootstrap? DataTables, насколько я знаю, является одним из самых популярных и простых в использовании решений для чего-то подобного.

Существует также мощный Bookmarklet (с которым также легко работать), который я много раз использовал в прошлом, и который вам может пригодиться. Если вам нужны локальные результаты, попробуйте с помощью ввести описание ссылки здесь.

0
Matt G. 21 Фев 2020 в 23:29