| 
 сортировка строк таблицы Доброго времени уважаемым гуру javascript'а. Что-то я никак не врублюсь как вывести после сортировки строк таблицы. Вроде всё понятно - загоняю строки в массив, потом его  массив.sort. А как потом отобразить? | 
| 
 atanov, appendChild | 
| 
 | 
| 
 Попробую эту тему оживить. Скорее всего руки кривые, вряд ли sort работает неправильно, но... 
function sorttable (e){
	var tbody = document.getElementsByTagName('tbody')[1];
    var rowsArray = [].slice.call(tbody.rows);	
	var compare;
	compare = function(rowA, rowB) {
	return rowA.cells[2].textContent > rowB.cells[2].textContent;}
	rowsArray.sort(compare);
	alltable.removeChild(tbody);
	for (var i = 0; i < rowsArray.length; i++) {
        tbody.appendChild(rowsArray[i]);
      }
      alltable.appendChild(tbody);
}
этот код вроде должен сортировать строки по строковому значению 3-й ячейки. Сортирует странно - скажем значения на латинскую букву 'A' идут правильно, потом бац идёт несколько строк на 'C', 'S' и т.д. тоже в виде блоков. Какой-то закономерности не обнаружил. Сижу чешу репу, подозрение падает на return: rowA.cells[2].textContent > rowB.cells[2].textContent; На дурака смотрел alert'ом: sort пары берёт, правда как попало (ну да, конечно ни как попало; знаю, что это фича sort в javascript). А вот как проверить правильность сортировки каждого шага, мож чё и увижу? | 
| 
 atanov, в compare напишите полноценный вариант условий | 
| 
 рони, Не врубаюсь, а чё туда добавить-то? Вроде там только латинские букавы... Или я не прав, что этого: rowA.cells[2].textContent > rowB.cells[2].textContent; недостаточно? | 
| 
 atanov, свой-порядок-сортировки | 
| 
 Сортировка строк по индексу ячейки (возрастание/убывание) atanov, 
<!DOCTYPE html>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
</head>
<body>
<table width="400" id="alltable" >
	<thead>
		<tr>
			<th>Title 1</th>
			<th>Title 2</th>
			<th>Title 3</th>
		</tr>
	</thead>
	<tbody>
	    <tr>
			<td>Cell 1.1</td>
			<td>B</td>
			<td>B</td>
		</tr>
		<tr>
			<td>Cell 2.1</td>
			<td>C</td>
			<td>C</td>
		</tr>
		<tr>
			<td>Cell 3.1</td>
			<td>A</td>
			<td>A</td>
		</tr>
	</tbody>
</table>
  <script>
function sorttable(table, index, up) {
  var tbody = table.querySelector("tbody");
  var rowsArray = [].slice.call(tbody.rows);
  var compare = function compareNumeric(a, b) {
    a = a.cells[index].textContent.trim();
    b = b.cells[index].textContent.trim();
    if (a > b) {
      return up ? 1 : -1;
    }
    if (a < b) {
      return up ? -1 : 1;
    }
  };
  var temp = document.createDocumentFragment();
  rowsArray.sort(compare).forEach(function(a) {
    temp.appendChild(a);
  });
  tbody.appendChild(temp);
}
;
var table = document.querySelector("#alltable");
sorttable (table, 2,true)
  </script>
</body>
</html>
 | 
| 
 рони, Спасибо большое. Но наверное я неправильно объяснил. У меня не цифры, а текст латиницей. Ведь Ваш код и код по ссылке именно с цифрами оперируют? Ещё, для самообразования хотел помучить - у Вас есть укороченные записи (который я никак не могу заставить себя выучить), можно разжевать для нуба, что они возвращают из функции: 
if (a > b) {
      return up ? 1 : -1;
    }
if (a < b) {
      return up ? -1 : 1;
    }
В довесок - Вы любитель обращаться к элементу DOM через querySelector, вот так: 
var tbody = table.querySelector("tbody");
Есть ли рациональное объяснение почему так лучше, чем обращение по id? Ну и напоследок - восхищение использованием createDocumentFragment()! | 
| 
 Цитата: 
 что они возвращают из функции 1 или -1 или 0 если up == true и -1, 1, 0 если up == false или не указан. вариант использования sorttable (table, 2,true) // сортировка по возрастанию содержимого третьей ячейки sorttable (table, 2) или sorttable (table, 2,false) // сортировка по убыванию содержимого третьей ячейки document.getElementById() быстрее querySelector, но id редко когда действительно необходимо. | 
| Часовой пояс GMT +3, время: 09:17. |