Сортировка - это расположение строк в таблице в определенном порядке. Чаще всего необходимо сортировать строки по данным одного или нескольких столбцов.

Сортировку можно производить как по возрастанию, так и по убыванию.

При сортировке по возрастанию используется следующий порядок. Сначала числа от наименьшего отрицательного до наибольшего положительного числа, затем различные знаки (+, -, !, и др.), затем английские буквы, затем русские буквы. При сортировке по убыванию порядок заменяется на обратный.

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

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

Сортировку таблицы можно выполнять при работе во вкладке Главная или Макет .

Сортировка таблицы производится следующим образом:

Установите курсор в любую ячейку таблицы.

Нажмите кнопку Сортировка в группе Абзац вкладки Главная или в группе Данные вкладки Макет .

В окне Сортировка в открывающемся списке поля Сначала по выберите столбец, по данным которого будет выполняться сортировка таблицы. В списке поля Т ип можно выбрать тип данных, по которым сортируется таблица, но обычно Word это делает автоматически. Установите переключатель направления сортировки по возрастанию или по убыванию.

В окне Параметры сортировки установите флажок только столбцы

8.4. Вычисления в таблице

В таблицах Word можно выполнять несложные вычисления с использованием формул. Для этого:

Установите курсор в ячейку, в которой требуется получить результат вычисления.

Во вкладке Макет в группе Данные нажмите кнопку Формула . Если эта кнопка не отображается, щелкните по стрелке кнопки Данные и, после отображения кнопки, нажмите ее.

В окне Формула (рис. 8.6) в поле Формула введите формулу. Для выбора функции можно воспользоваться списком поля Вставить функцию . При желании в списке поля Формат числа можно выбрать числовой результат вычисления (числовой с разделителем разрядов, денежный, процентный).

Рис. 8.6. Создание формулы в ячейке

В некоторых случаях формула в окне Формула может быть записана автоматически. Например, если ячейка находится ниже ячеек с числами, будет записана формула = SUM (ABOVE) , что означает суммирование всех вышерасположенных ячеек. Если ячейка находится правее ячеек с числами, будет записана формула = SUM (LEFT) , что означает суммирование всех слева расположенных ячеек. Если требуется именно такое действие, можно применить эти формулы. В противном случае поле следует очистить и ввести формулу самостоятельно.

Формула вставляется в ячейку таблицы как специальное поле. При изменении значений в вычисляемых ячейках результат не будет автоматически изменяться. Для пересчета следует выделить ячейку и нажать клавишу F9.

8.5. Размещение таблицы в документе

Установка режима обтекания текстом.

Вставленная в документ таблица по умолчанию размещается без обтекания текстом с выравниванием по левому полю страницы.

Для выравнивания таблицы по краям страницы достаточно ее выделить и воспользоваться кнопками группы Абзац вкладки Главная . При таком выравнивании таблицы режим обтекания текстом не изменяется.

Изменить режим обтекания и положение таблицы можно следующим образом:

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

Нажмите на левую кнопку мыши и перетащите маркер. В процессе перетаскивания граница таблицы будет отображаться пунктиром.

Можно точно настроить положение таблицы на странице документа. Для этого:

Установите курсор в любой ячейке таблицы.

Во вкладке Макет в группе Таблица нажмите кнопку Свойства .

Во вкладке Таблица окна Свойства таблицы в разделе Обтекание выберите режим В округ и нажмите кнопку Размещение .

В окне Размещение таблицы (рис. 8.7) в разделе По горизонтали в раскрывающемся списке относительно можно выбрать, относительно какого элемента страницы будет выравниваться таблица: колонки, поля или страницы, а в списке поля Положение можно выбрать расположение таблицы (Слева , Справа , От центра , Внутри , Снаружи ) или ввести с клавиатуры требуемое значение в сантиметрах. Аналогично можно указать размещение таблицы и по вертикали.

Рис. 8.7. Установка положения таблицы

Для отказа от режима обтекания таблицы текстом следует установить курсор в любой ячейке таблицы, во вкладке Макет в группе Таблица нажать кнопку Свойства , во вкладке Таблица окна Свойства таблицы в разделе Обтекание выбрать режим нет .

Перенос заголовков таблицы на следующую страницу.

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

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

Во вкладке Макет в группе Данные нажмите кнопку Повторить строки заголовков .

Преобразование таблицы в текст.

Всю таблицу или ее фрагмент можно преобразовать в текст. Для этого:

Установите курсор в любую ячейку таблицы или выделите преобразуемый диапазон

Во вкладке Макет в группе Данные нажмите кнопку Преобразовать в текст .

В окне Преобразование в текст укажите символ, который будет разделять фрагменты текста, сформированные из отдельных ячеек таблицы. Это может быть один из типовых символов (знак абзаца, знак табуляции или точка с запятой) или любой символ по вашему усмотрению, например, точка, пробел, запятая и т. п. В этом случае установите переключатель другой, поставьте курсор в рядом расположенное поле и с клавиатуры введите символ разделителя. Если таблица содержит вложенные таблицы, их также можно преобразовать в текст (флажок вложенные таблицы).

Рис. 11.20. Преобразование таблицы в текст

Выбранный разделитель разделяет данные ячеек одной строки; независимо от выбранного разделителя разделителем строк таблицы является знак абзаца.

Встала задача отсортировать таблицу на яваскрипте по любому столбику. Известный всем плагин tablesorter у меня не заработал, и я решил, что быстрее и удобнее будет написать свой скрипт. Вот, что получилось через час:

Скрипт получился из 20 строк, 1 кб (готовый tablesorter весит 13 кб и дольше «усваивается»). Ещё одно отличие: подготовительные операции для сортировки происходят по клику; это имеет смысл, потому что сортировка нужна не всем.

Первым делом нужно присвоить идентификаторы каждой строчке таблицы. Это лучше сделать сразу на сервере при выводе таблицы:



...

Теперь идентификатор будет привязан к строке с данными, и если её переставить в другое место, ничего не перепутается.

Сортировка массива

В интернете можно найти решения, где таблица целиком переводится в многомерный массив, а затем этот массив сортируется, после чего формируется и выводится новая таблица на место старой. Однако мне этот способ показался слишком громоздким, ведь достаточно держать в памяти всего два столбика:
1) по которому происходит сортировка,
2) столбик идентификаторов.

Можно обойтись простым массивом (ключ => значение), где ключ отвечает за номер строки. Но лично мне проще использовать двумерный массив, чтобы не запутаться между ключами и значениями.

На примере моей таблицы:

А первые значения массива указывают, в каком порядке будут идти строки отсортированной таблицы.

Кстати, данный метод аналогичен сортировке в MySQL с использованием вре́менных таблиц.

Во временный массив желательно класть подготовленные значения, которые быстро и легко сравнивать. Лишнее (тэги и css) надо отбросить, отформатированные числа перевести в обычные числа (20 000 → 20000), а строки можно превратить в некие эквиваленты. Например, в моём случае единственный текстовый столбик содержит только два слова: свободен и бронь . У них разная длина, а значит, во временный массив можно записать только длину слов — этого хватит для корректного сравнения.

var z=$(this).children("td").eq(i_s).html().split(" ").join(""); //убираем пробелы
if(isFinite(z)) {z=parseInt(z);} else {z=z.length;} //число остаётся числом, а у строк оставляем только длину

В яваскрипте есть готовый алгоритм сортировки, использующий функцию сравнения двух элементов:

function sName(a,b) { //задаём функцию сравнения
if(a < b) {return (-1)*s_vozr;}
else if(a > b) {return s_vozr;}
else {return 0;}
}

multi.sort(sName); //сортируем массив multi, указав функцию sName

Функция sName(a,b) возвращает −1, 0 или 1. Если умножить возвращаемое значение на −1, то это изменит направление сортировки (по возрастанию или по убыванию). Таким образом, при помощи параметра s_vozr можно управлять направлением сортировки (если повторно кликнули по столбцу, параметр s_vozr меняет знак).

Перестановка строк таблицы

Теперь надо как-то удалить старую таблицу и показать новую, отсортированную. Тесты я не проводил (буду благодарен за ссылки в комментариях), но почти уверен, что экономичнее перемещать небольшие кусочки данных (то есть строки), чем парсить заново всю таблицу. Если это и не оптимизировано сейчас, то в будущем перемещение элементов должно занимать меньше времени, чем удаление старых и обработка новых элементов; а в нашем случае речь идёт о вставке довольно большой таблицы.

Как переделать старую таблицу в новую, используя перемещение строк? Пройдёмся в цикле по нашему вре́менному массиву, перемещая нужные строчки таблицы в её конец.

От того, куда перемещать строки — в конец или в начало — очевидно, зависит получаемое направление сортировки. Но эффективнее их сдвигать именно в конец. А если нужно изменить направление сортировки, то лучше пройтись по массиву в обратную сторону (или изначально сформировать обратный массив).

Зачем перегружать страницу при сортировке HTML-таблицы? Нельзя ли перегруппировать HTML элементы таблицы прямо в браузере, с помощью Javascript?.js (55 строк).

Сортировка таблицы средствами JavaScript - DOM

Вопрос когда-то с неизбежностью возникает перед любым добросовестным веб-мастером: зачем перегружать HTML страницу при сортировке таблицы? Нельзя ли перегруппировать HTML элементы таблицы прямо в браузере, без серверных скриптов, с помощью одного только Javascript? Решение задачи и описание решения являются в данном случае одинаково интересными. К моменту, когда вопрос привлёк наше внимание, мы исходили из следующих посылок:

  • HTML элементы таблицы априори можно менять друг с другом местами (в т.ч. сортировать) средствами DOM-Javascript;
  • подобные манипуляции с DOM Node можно (и, в идеале, нужно!) производить с помощью кода Javascript очень небольшого размера, понятного и «прозрачного»;
  • на каком-то популярном ресурсе нам уже встречалась довольно большая таблица, сортируемая без перезагрузки;
  • невероятно, чтобы по такому очевидному вопросу никто ничего не написал в Интернете.
  • Приступив к детальному исследованию, мы, в первую очередь, нашли подозреваемый ресурс; это оказался форум torrents.ru. Ничего утешительного, однако, он нам не принёс: там для сортировки таблицы используется колоссальный плагин с сайта tablesorter.com к чудовищному 200-килобайтному супер-кроссбраузерному «фреймворку» jQuery (который веб-мастера уже довольно привычно пихают куда попало, к месту и не к месту).

    Нет, это не наш путь, это противоречит второй посылке. Нормальный код должен быть коротким и понятным, доступным для объяснения. К тому же, отсутствует «расширяемость» (кому надо копаться в этих монстрах?). Например, довольно быстро натыкаешься на следующее неудобство при сортировке таблиц в torrents.ru: при возвращении на страницу с отсортированной ранее javascript"ом таблицей, таблица открывается в первозданном виде. Как «закрепить» статус сортировки на странице? Это можно было бы сделать с помощью cookie (о чём мы недавно писали в статье о сохранении настроек пользователя), но куда потом в этом jQuery-сортере пихать сохранённые параметры?

    Полезли в Яндугль – проверять 4-ю посылку; там тоже ничего утешительного. На первых местах не очень корректные решения, а два более-менее заинтересовавших нас – на сайтах usa.org.ua и HTMLcoder.visions.ru – оказались «позаимствованными» у буржуев – с сайтов www.leigeber.com/2009/03/table-sorter/ и idontsmoke.co.uk соответственно. Решения при беглом знакомстве показались неплохими, но всё-таки чрезмерно сложными; да и за державу немного обидно.

    Надеемся, что наш скрипт сортировки HTML таблиц будет короче и лучше, а его описание – понятнее. Вот, кстати, он сам – tabsort.js , а вот результат его работы:

    Общая постановка задачи (приблизительный алгоритм)
  • Заголовочная строка. Сортировать надо не все строки таблицы, первая строка должна быть с заголовками, которые остаются на месте. Сортировка должна производиться при щелчке по заголовку столбца; значит, курсор в строке заголовков должен быть «Указатель». При повторном щелчке по тому же заголовку сортировать в обратном порядке.
  • Что именно сортировать? Средствами DOM-Javascript легко получить HTML-коллекцию элементов, в том числе, строк таблицы. Но как сортировать эти элементы (которые в представлении Javascript являются объектами и в примитивном своём значении выглядят все одинаково – как HTMLRowElement)?
  • Очевидно, что сортировать можно только текст , к которому можно получить доступ двумя (примерно) путями: через свойство innerHTML и через nodeValue текстовых узлов.
  • В первом приближении: получаем строки таблицы, innerHTML для каждой – и сортируем. Так возможна сортировка по первому столбцу. Как сортировать по другим?
  • Мы увидели два варианта: 1) насортировать элементы выбранного столбца и потом привести порядок строк в соответствие с полученными новыми индексами; 2) сортировать сразу строки – с помощью пользовательской функции, которая будет сравнивать тексты элементов «щёлкнутого» столбца.
  • Возникла дополнительная задача – сравнить скорость вариантов и выбрать лучший.
  • Заголовки. «Полосатая» таблица.

    Следуя хорошей практике ненавязчивого javascript , мы привязываем какие-то события к объектам не внутри HTML кода, а в скрипте, расположенном в конце страницы. В данном случае объект – таблица. Может быть, не одна таблица на странице. И, может быть, не все таблицы, а избранные. Мы решили избирать их по одному атрибуту: class="sortable". Если у элемента table есть такой атрибут, таблица будет привязана к нужному событию для сортировки.

    Var tex=document.getElementsByTagName("TABLE"); for (var el in tex) { var elem=tex; if (1==elem.nodeType && "TABLE"==elem.tagName && "sortable"==elem.className) { elem.onclick=clicktab; elem.rows.style.cursor="pointer"; //полосатая таблица for (var j = 1; j < elem.rows.length; j++) { if (0==j%2) elem.rows[j].style.backgroundColor="f0f0f0"; elem.rows[j].onmouseover=overtab; elem.rows[j].onmouseout=outtab; } } }

    Попытка получить свойства какого-то объекта (или элементы HTML-коллекции) способом for (var el in obj) не в теории, а в конкретном браузере (не будем показывать пальцем), иногда даёт странные результаты. Именно этим объясняются наши перестраховочные проверки: является ли узел элементом (nodeType 1) и даже имеет ли он tagName "TABLE" (не затесалось ли при выборке getElementsByTagName("TABLE") туда нечто иное!). Нам трудно привести рациональные причины своего поведения в этом случае, но «это работает», а без «этого» у нас когда-то где-то возникали проблемы.

    Назначение избранным таблицам события onclick=clicktab занимает первые 6 строк «инициирующего» кода. Следующие 6 строк посвящены боевой раскраске таблиц в чередующиеся чёрно-белые полосы. Всё равно мы планировали её когда-то описывать, почему бы не сэкономить место и не сделать это заодно. Н-да. И почему бы заодно («Остапа несло») не запрограммировать «подсвечивание» строк таблицы при движении над ними мыши? Это займёт ещё 12 строк:

    Var trcolor; function overtab(e) { e = e || window.event; var obj=e.target || e.srcElement; var tr=obj.parentNode; trcolor=tr.style.backgroundColor; tr.style.backgroundColor="#ccf"; }

    Код функции outtab , возвращающей первоначальный цвет покинутым строкам, как две капли воды похож на overtab (что, конечно, является недостатком и поводом для оптимизации в ближайшем будущем) и находится в файле tabsort.js . Впрочем, оптимизация будет не очень: в коде останутся те же 12 строк; зато логика лучше.

    Подводные камни: как получить строки таблицы?

    Кто знаком с DOM, сразу может подумать о такой конструкции: находим элемент «таблица», получаем список его «детей» – вот тебе и массив строк для сортировки! Вроде document.getElementById("mytable").childNodes . И это будет ошибкой. Таблица – сложный элемент; в каждой таблице обязательно есть (пишем мы его в HTML коде явно или нет) вложенный элемент tbody , и только в нём уже могут находится строки (row ). А ещё в таблице может быть элемент thead , и в нём тоже могут быть строки. А ещё в таблице может быть несколько элементов tbody ! Поэтому получение строк таблицы через интерфейс DOM Node может оказаться довольно сложным. Или надо будет обязать пользователей нашего DOM-сортировщика чётко выдерживать структуру HTML кода таблицы – с обязательным thead и (единственным) tbody .

    К счастью, у DOM интерфейса HTML таблицы HTMLTableElement , в отличие от других HTML элементов, есть особое свойство rows , которое и даёт сквозной список всех строк таблицы, независимо от их положения в thead и разных tbody . С учётом этого код получения всех строк таблицы будет примерно таким: document.getElementById("mytable").rows . Далее, у HTMLTableRowElement , конечно же, есть свойство cells , а у HTMLTableCellElement есть очень важное для нас свойство cellIndex , указывающее порядковое место ячейки в строке, т.е., фактически, номер колонки (которую мы планируем сортировать!).

    Следующая сложность. Ну, получили мы, допустим, список строк. Как его теперь сортировать? То, что мы получили через интерфейсы DOM, называется HTML коллекция ; у этого объекта (или набора объектов) нет метода сортировки (как, впрочем, нет его и ни у одного другого объекта DOM в HTML). Ясно, придётся переводить всё в массив Javascript. Массив сортировать можно. Как потом помещать элементы обратно в дерево DOM в правильном порядке? Как потом (или сначала?) удалять старые элементы, стоящие в неправильных местах?

    Функция сортировки таблицы clicktab

    Код всей системы (с функцией сортировки и привязкой к избранным таблицам) находится в файле tabsort.js и занимает сто с небольшим строк (треть которых – комментарии!:-).В начале и в конце функции стоят строки для учёта времени работы. Основная строка учёта – с alert – закомментирована, если её раскомментировать, будет выскакивать сообщение с числом миллисекунд, затраченных на сортировку таблицы.

    Работа функции начинается при щелчке по любой ячейке «избранной» таблицы (не только по заголовку). В первую очередь, из события «щелчок» (click) мы извлекаем именно тот элемент, по которому был клик. Это, в общем случае, ячейка (элемент td или th ). Мы исходим из того, что это верно. Мы вообще декларируем работу скрипта только при щелчке по заголовкам столбцом. Если в ячейке заголовка планируются вложенные элементы (например, ради особого оформления), в начало функции следует добавить поиск основного элемента th , по аналогии с поиском «родительской» таблицы (этот фрагмент сейчас в функции clicktab закомментирован):

    If ("TD"!=obj.tagName && "TH"!=obj.tagName) { while (("TD"!=obj.tagName && "TH"!=obj.tagName) && null!=obj.parentNode) { obj=obj.parentNode; //ячейка } }

    По причине структурной сложности самой таблицы, примерно так же находится сам элемент table (и записывается в переменную tab). Впрочем, пока вы это читали, данный фрагмент кода устарел и удалён из рабочей версии (до нас вдруг дошло, что именно на таблицу навешено событие click , и значит она доступна внутри функции по слову this ).

    На первый взгляд, несколько спорная строка var tbody=tab.lastChild; – вдруг в таблице будет несколько вложенных tbody? Но, поскольку мы получаем строки таблицы через сквозное свойство rows , для извлечения всех строк нам неважно количество tbody; мы выбираем последний из всех, чтобы поместить туда новый , отсортированный массив со строками.

    Для функции cmprow (a, b), которая непосредственно сортирует массив, нужен тип сортируемых строк. А то для чисел сортировка может получиться в виде «1, 10, 2, 20». Принимаем тип по умолчанию числовой (sorttype="num"); затем, при прохождении в цикле всего сортируемого столбца, проверяем тип каждого текста; и если тип хоть одной ячейки будет не числовым (isNaN), тип всей сортировки назначается строковым (sorttype="str").

    Ещё один спорный момент – innerHTML. У одного из буржуйских предшественников нашего скрипта используется кропотливое циклическое извлечение всех текстов (nodeValue узла textNode) из элементов, вложенных в ячейку. Результат, однако, напоминает нечто вроде strip_tags в PHP. Мы упрощаем этот момент, что, по сути, приводит к группировке однородных по структуре ячеек (например, со ссылками) и к сортировке уже внутри этих групп. Ну, это уже больше вопрос идеологии – как именно надо сортировать. Можно и по извлечённым текстам, игнорируя структуру тэгов – это, скорее всего, не должно сильно замедлить всю процедуру. Да. Поэтому мы таки тоже будем извлекать тексты, но менее изощрённо (точнее, извращённо) - именно по кальке метода strip_tags ; а в резерве останется возможность сортировки с тэгами при удержании клавиши Shift (например). Вот оно, создание массива rarr для последующей сортировки:

    For (var j=1; j 1.

    Сокращать записи вида 1,-1,3,1 нельзя. Это связано с одной особенностью, которая может работать на благо пользователя: последовательные сортировки обрабатывают не начальные данные, а результат последней сортировки. Т.е. последовательные сортировки разных столбцов работают a la Excel, а не как в базе данных (каждый раз с исходной таблицей). Это значит, для сортировки по двум и более столбцам не нужно никаких ухищрений с удержанием клавиши Shift (как предлагает tablesorter.com) и соответствующих усложнений кода - у нас всё и так при последовательных щелчках по разным столбцам работает, как интуитивно ожидает пользователь.

    И это работает быстро, быстрее, чем у плагина tablesorter! Таблица в 400 строк (800К) сортируется за 1.5 секунды (Athlon 999МГц, 512 МБ ОЗУ, Windows XP). А клавишу Shift мы резервируем для обработки разных типов данных: 1) при удержании этой клавиши (в следующей версии программы) будем сортировать HTML код, а не ободранный strip-тэгами текст; 2) добавим сортировку даты, по умолчанию дата будет считаться русской (dd.mm.yy), а при удержании Shift - импортной (mm.dd.yy).

    © 2010, «Деловая неделя», Михаил Гутентог

    Комментарии

    Дилетант 10.02.2013 17:47:04

    Nik_neman 17.02.2012 01:37:17

    День добрый. Использую Big Table Sorter v2.1 (+ JS Data Filter). Данные перед этим вывожу из БД с помощью PHP+MySql... через каждые 10 строк необходимо выводить баннер, названия которого совпадает с текстом предшествующей строчки... решил начать делать постепено и, вывести 10 строчку и 3 столбец... с помощью данного кода: var l = document.getElementById("banners").rows.cells.innerHTML; document.write(l); но мне выводит название, которое хранится в БД. СОРТИРОВКА не учитывается. В javascript не силён. Помогите, пожалуйста, советом. Заранее спасибо.

    Лесник 10.05.2011 16:31:55

    Чайник , можно, если у вас есть доступ к изменению HTML-кода страницы: вы можете добавить свою HTML-таблицу (с атрибутом class="sortable") на любую страницу, сохранить файл и радоваться.

    Чайник 10.05.2011 02:06:57

    Очень нужная задача! А нельзя ли взять работающий сайт с сортировкой таблицы и подсунуть в него свою таблицу (если я владею только HTML)?

    Лесник 08.12.2010 05:19:15

    Iris_din , нет: функция подготовки таблиц к сортировке запускается один раз, по событию "загрузка страницы" (window.onload); если после этого создать (динамически) новую таблицу, она не будет подключена к системе сортировки.

    Впрочем, в текущей версии (файл tabsort.js) я сделал для вас такую возможность: после создания вашей динамической таблицы следует запустить функцию prepTab(t), принимающую теперь в качестве параметра "t" HTML-элемент - таблицу, которую нужно сортировать.

    Лесник 11.12.2010 23:30:41

    Всё, сделал возможность подключать Сортировщики к динамически созданной таблице в обеих версиях: и . Как подключать, написано (с примером) в статье tabsort0.aspx).

    Да, и тут с добавлением комментариев какой-то бардак был - вроде, теперь исправил.

    Iris_din 08.12.2010 01:19:15

    Скажите, работает ли сортировка для динамически созданных таблиц? У меня почему-то не получается.

    Лесник 30.09.2010 18:07:00

    О, да, получить «реальный» индекс ячейки можно. С помощью функции realCellIndex() . Которую специально для этого мне пришлось написать:-). Наверное, можно считать, что готов «релиз» Сортировщика v1.3 – tabsort1.3.js (не забывайте обновлять также ir2.js).

    Краткое описание алгоритмов и трудностей – в статье tabsort1-3.aspx . Примеры работы: thead2.htm , limit1001.htm (большая таблица).

    MrTopa 30.09.2010 02:17:46

    Рано обрадовался. В таком варианте таблицы неправильно определяется реальный индекс колонки второй строки шапки.

    id0TickerPrice Open id1NameName1
    Company
    53ABD126.1
    72AAC512.59
    61ADB47.45
    84DCA19.82
    Можно ли как-то уникально идентифицировать ячейку кроме cell.cellIndex?

    Лесник 29.09.2010 16:06:56

    Да, с innerHTML в ИЕ оказалась полная задница. Работаю сейчас над этим. Потому что всё равно надо – большие таблицы (1000 строк) с использованием innerHTML отрисовываются в ИЕ в десять раз быстрее, чем с помощью appendChild . В других браузерах в 5-7 раз быстрее. Для маленьких таблиц (100-200 строк) это не принципиально.

    Ну, заодно и раскраску проверю.

    MrTopa 29.09.2010 02:59:37

    Спасибо, заработало. Только IE8 (в более ранних не проверял) не захотел принимать строку tbody.innerHTML = newtbody в функции draw(table). Потому закомментировал newtbody и раскомментировал старый вариант, добавив delclass(table.rarr[l].val, "even"); delclass(table.rarr[l].val, "odd"); перед var classN = (l%2) ? "odd" : "even", иначе строки подкрашивались неправильно, а через несколько сортировок подкраска вообще исчезала

    Лесник 24.09.2010 03:57:42

    MrTopa , спасибо за интересную задачу. Заставили меня попотеть. Скачайте скрипт tabsort1.3a.js – с ним указанная вами таблица с заголовком из двух строк (thead.htm) должна сортироваться нормально. Пока не проверял новый скрипт на сохранение параметров сортировки (в тестовом стоит use_cookie = false), остальное, вроде, работает.

    MrTopa 23.09.2010 00:29:38

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

    TickerPrice Open idNameName1

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

     
    Company
    3ABD126.1
    2BAC512.59
    1CDB47.45
    4DCA19.82