Сортировка таблицы - просто и со вкусом
Написал небольшой плагин для сортировки таблиц. Знаю, что есть jqueryTablesorter, но он слишком большой.:) Решил выставить на обсуждение.
// TableSorter plug-in /* Функция TableSorter.sort сортирует таблицу table по столбцу col, используя при этом функцию fun. Необязательный аргумент likeNum (default=false) заставляет рассматривать значения ячеек как числа. */ var TableSorter = {}; TableSorter.sort = function(table,col,fun,likeNum){ //Метод прототипа для массивов, который переставляет элементы с индексам //firstIndex и secondIndex местами Array.prototype.swap = function(firstIndex,secondIndex){ c=this[firstIndex]; this[firstIndex] = this[secondIndex]; this[secondIndex] = c; } //Определяем тело таблицы var tbody = table.tBodies[0]; //Определяем все строки внутри тела таблицы var trs = tbody.rows; //Сюда будут помещены значения ячеек сортируемого столбца var sortedTds = new Array(); //Порядок следования ячеек в сортируемом столбце var tdsNums = new Array(); for(var i=0;i<trs.length;i++){ //Преобразуем (или не преобразуем) значение ячейки в число в зависимоси от likeNum var content = likeNum?parseFloat(trs[i].cells[col-1].innerHTML): trs[i].cells[col-1].innerHTML; //Заносим значение ячейки в массив sortedTds.push(content); //Заносим индекс в массив индексов tdsNums.push(i); } //Сортируем массив sortedTds методом пузырька, при //этом также переставляя местами элементы в массиве индексов for(var i=0;i<sortedTds.length;i++){ for(var j=0;j<sortedTds.length-i-1;j++){ if(fun(sortedTds[j],sortedTds[j+1])) {sortedTds.swap(j,j+1);tdsNums.swap(j,j+1)} } } //Создаем контейнер var container = document.createDocumentFragment(); //Поочередно запихиваем в контейнер строки таблицы, //вставляя при этом в нее новые строки, чтобы индексы не сбились for(var i = 0;i<tdsNums.length;i++){ tbody.insertRow(tdsNums[i]+1); container.appendChild(trs[tdsNums[i]]); } //Очищаем тело таблицы. //Здесь подошел бы innerHTML='', но IE его не поддерживает while(tbody.rows.length>0){tbody.deleteRow(0);} //Добавляем отсортированные строки таблицы в пустое тело. tbody.appendChild(container); } Использование: window.onload = function(){ var table = document.getElementById('sortedTable'); var sortFun = function(a,b){return a>b;} TableSorter.sort(table,2,sortFun,true); } <table id="sortedTable"> <tr><td>34</td><td>45*</td></tr> <tr><td>543</td><td>32?</td></tr> <tr><td>76890</td><td>217%</td></tr> <tr><td>123434</td><td>67.9</td></tr> <tr><td>4536</td><td>51.9</td></tr> <tr><td>3455</td><td>430</td></tr> <tr><td>5667</td><td>4567)))</td></tr> <tr><td>890</td><td>218(</td></tr> </table> Есть предложения по рационализации и улучшению кода? |
Часовой пояс GMT +3, время: 22:47. |