На этом шаге мы рассмотрим некоторые особенности ключей сортировки.
Теперь нам необходимо реализовать тот же вид сортировки для столбца Автор(ы). Мы можем выполнить сортировку по столбцу Автор(ы) с помощью существующего программного кода простым добавлением класса sort-alpha к ячейке в заголовке таблицы. В идеале сортировка должна выполняться по фамилиям авторов, а не по именам. Так как некоторые книги могут быть написаны коллективами авторов, а для некоторых авторов могут указываться отчества или инициалы, нам необходимо определить, какую часть текста ячейки следует использовать в качестве ключа сортировки. Мы можем обозначить эту часть текста, обернув ее тегом:
. . . . . <tr> <td><img src="images/pic01.jpg" width="49" height="61" alt="Создаем динамические веб-сайты с помощью PHP, MySQL и JavaScript" /> </td> <td>Создаем динамические веб-сайты с помощью PHP, MySQL и JavaScript</td> <td><span class="sort-key">Никсон</span> Р.</td> <td>2013</td> <td>381 руб</td> </tr> <tr> <td><img src="images/pic02.jpg" width="49" height="61" alt="PHP и MySQL. Исчерпывающее руководство" /> </td> <td>PHP и MySQL. Исчерпывающее руководство </td> <td><span class="sort-key">Маклафлин</span> Б.</td> <td>2013</td> <td>563 руб</td> </tr> . . . . .
Теперь следует изменить реализацию сортировки так, чтобы принять во внимание этот тег и не нарушить при этом существующий порядок сортировки по столбцу Название. Добавив перед отмеченным ключом сортировки ключ, который был вычислен ранее, мы можем отсортировать данные в таблице сначала по фамилиям авторов, если они обозначены в разметке, или в противном случае по всему тексту в ячейке:
$.each(rows, function(index, row) { var $cell = $(row).children('td').eq(column); row.sortKey = $cell.find('.sort-key').text() .toUpperCase() + ' ' + $cell.text().toUpperCase(); });
Сейчас для сортировки по столбцу Автор(ы) используется предоставленный ключ, благодаря чему она выполняется по фамилиям авторов, как показано на рисунке 1.
Рис.1. Таблица, позволяющая сортировать по названиям и фамилиям авторов
Полный текст этого примера можно взять здесь.Если в соседних ячейках указаны одинаковые фамилии авторов, для разрешения конфликта сортировка выполняется по всей строке.
На следующем шаге мы рассмотрим сортировку данных других типов.