На главную

Сортировка таблиц

1 2
9 8
4 7
6 15

В силу особенностей предоставляемой на сайте информации информации запотемилось мне сделать на JavaScript (потому как другими языками для работы с HTML я не занимался, да и этот только что начал изучать) процедуру, которая позволяла бы сортировать "любые" таблицы по указанному столбцу. Результатом этих потуг явилась процедура SortTable.

Посмотреть как она работает можно на примере таблицы, показанной выше. Текст HTML-ки, выводящей эту таблицу и содержащий код процедуры приведен ниже:

<HTML>
<HEAD>
<SCRIPT>

function SortTable(myTable, nCol, nRow)
{//перебираю строки таблицы, начиная с nRow
for(k=nRow; k<myTable.rows.length; k++)
  {//перебираю строки таблицы начиная с k-той строки
   for(i=k; i<myTable.rows.length; i++)
    {//сравниваю i-тую строку с k-той по значению текста ячейки nCol 
     if(myTable.rows[i].cells[nCol].innerText<myTable.rows[k].cells[nCol].innerText)
      {//если значение i-той < k-той - вставляю новую строку в позицию k 
       newrow=myTable.insertRow(k)
       //(таблица раздвинулась, i-тая строка першла в позицию i+1)
       for(j=0; j<myTable.rows[i+1].cells.length; j++)
        {//заполняю значения ячеек вновь созданной строки значениями ячеек из строки i+1
         newcell=newrow.insertCell(j)
         newcell.innerHTML=myTable.rows[i+1].cells[j].innerHTML
        }
       //удаляю строку i+1
       myTable.deleteRow(i+1)
      }
    }
  }
}
</SCRIPT>
</HEAD>
<BODY>
<TABLE id="mytable" border=1>
<TR>
<TD> <BUTTON onclick=SortTable(document.all.mytable,0,1) title="Сортировать по первому столбцу"> КОЛОНКА1</BUTTON> </TD>
<TD> <BUTTON onclick=SortTable(document.all.mytable,1,1) title="Сортировать по второму столбцу"> КОЛОНКА2</BUTTON> </TD>
</TR>
<TR><TD> 1 </TD><TD> 2 </TD></TR>
<TR><TD> 9 </TD><TD> 8 </TD></TR>
<TR><TD> 4 </TD><TD> 7 </TD></TR>
<TR><TD> 6 </TD><TD> 15 </TD></TR>
</TABLE>
</BODY>
</HTML>

Параметры, передаваемые в процедуру:

  1. myTable - указатель на сортируемую таблицу;
  2. nCol - порядковый номер столбца по которому производится сортировка (нумерация от 0);
  3. nRow - порядковый номер строки начиная с которой будет производится сортировка (нумерация от 0). Введен чтобы не сортировать заголовки таблицы.
Таблица в сортируемой области не должна содержать объединенные ячейки иначе результат сортировки может быть "непредсказуем". Содержимое ячеек столбца, по которому таблица сортируется, интерпретируется как текст и сортировка происходит в алфавитном порядке.



Hosted by uCoz