Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 24.07.2016, 22:00
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

gazman,
алгоритм моего кода ничем не отличается от вашего,просто правильно указаны данные и добавлена сортировка в обе стороны за счёт reverse
Ответить с цитированием
  #12 (permalink)  
Старый 24.07.2016, 22:07
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

gazman,
изменены/добавлены строки 85,86, 94
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
</head>

<body>
<table class="sort" id="sort" align="center">
  <tr id="zag">
    <td>ID</td>
    <td>Имя</td>
    <td>Фамилия</td>
    <td>Сайт</td>
    <td>Переключалка стилей</td>
  </tr>
  <tr>
    <td>1</td>
    <td>Александр</td>
    <td>Шуркаев</td>
    <td><a href="#">htmlcoder.visions.ru</a></td>
    <td>Не-а</td>
  </tr>
  <tr>
    <td>123</td>
    <td>Пол</td>
    <td>Соуден</td>
    <td><a href="#">idontsmoke.co.uk</a></td>
    <td>Угу</td>
  </tr>
  <tr>
    <td>3</td>
    <td>Джеффри</td>
    <td>Зельдман</td>
    <td><a href="#">zeldman.com</a></td>
    <td>Угу</td>
  </tr>
  <tr>
    <td>44</td>
    <td>Аарон</td>
    <td>Будман</td>
    <td><a href="#">youngpup.net</a></td>
    <td>Не-а</td>
  </tr>
  <tr>
    <td>11</td>
    <td>Глен</td>
    <td>Мерфи</td>
    <td><a href="#">glenmurphy.com</a></td>
    <td>Не-а</td>
  </tr>
  <tr>
    <td>15</td>
    <td>Даниель</td>
    <td>Боган</td>
    <td><a href="#">waferbaby.com</a></td>
    <td>Не-а</td>
  </tr>
  <tr>
    <td>33</td>
    <td>Ден</td>
    <td>Бенджамин</td>
    <td><a href="#">hivelogic.com</a></td>
    <td>Угу</td>
  </tr>

</table>
<script>
 var table = document.getElementById("sort");
var zag = document.getElementById("sort").rows[0].cells;
var stroke = document.getElementById("sort").rows;


function perebor(zg)
{
  for (i=0; i<zg.length; i++)
  {
    zg[i].onclick = function ()
    {
      index = this.cellIndex;
      cellRezult = [];

      function comp(a, b) {
         b = +b[0] || b[0];
         a = +a[0] || a[0];
        if (a > b) return 1;
        if (a < b) return -1;
      }

      for (i=1; i<table.rows.length; i++)
      {
        cellRezult[i-1] = [];
        cellRezult[i-1][0] = table.rows[i].getElementsByTagName("td").item(index).textContent;
        cellRezult[i-1][1] = table.rows[i];
      }

      cellRezult.sort(comp);

      for (i=0; i<cellRezult.length; i++)
      {
        table.appendChild(cellRezult[i][1]);
      }
    }
  }

}

perebor(zag);

</script>

</body>
</html>
Ответить с цитированием
  #13 (permalink)  
Старый 25.07.2016, 00:52
Аспирант
Отправить личное сообщение для gazman Посмотреть профиль Найти все сообщения от gazman
 
Регистрация: 02.09.2015
Сообщений: 38

спасибо большое
Ответить с цитированием
  #14 (permalink)  
Старый 27.07.2016, 09:29
Аспирант
Отправить личное сообщение для gazman Посмотреть профиль Найти все сообщения от gazman
 
Регистрация: 02.09.2015
Сообщений: 38

рони,
пожалуйста объясните, что означает запись в Вашем коде:
a && e.reverse();
и
a ^= 1
Ответить с цитированием
  #15 (permalink)  
Старый 27.07.2016, 09:58
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

gazman,
a && e.reverse();
if(a == 1) e.reverse();
если второе нажатие изменить порядок сортировки
a ^= 1 это генератор 0 1 0 1 0 1 ... чётное нечётное нажатие
Ответить с цитированием
  #16 (permalink)  
Старый 27.07.2016, 10:08
Аспирант
Отправить личное сообщение для gazman Посмотреть профиль Найти все сообщения от gazman
 
Регистрация: 02.09.2015
Сообщений: 38

спасибо
дорабатываю сортировку. хочу, чтобы в прямом и обратном направлении сортировало. Ваш код великолепно работает, но мне хочется научиться самому. я делаю проверку на наличие переменной, чтобы выбрать порядок сортировки. Но присутствует такой глюк. если я кликаю на один столбец, то сортирует в прямом порядке. а если сразу кликнуть на другой столбец, то сортируется предыдущий столбец в обратном порядке. нужно прогнать сортировку одного столбца туда и обратно, чтобы можно было сортировать другой.
var table = document.getElementById("sort");
var zag = document.getElementById("sort").rows[0].cells;
var stroke = document.getElementById("sort").rows;


function perebor(zg)
{	
	var up = 0;
	for (i=0; i<zg.length; i++)
	{
		zg[i].onclick = function ()
		{
			index = this.cellIndex;
			cellRezult = [];
			
			function comp(a, b) {
				b = +b[0] || b[0];
				a = +a[0] || a[0];
				if (a > b) return 1;
				if (a < b) return -1;
			}
			
			for (i=1; i<table.rows.length; i++)
			{
				cellRezult[i-1] = [];
				cellRezult[i-1][0] = table.rows[i].getElementsByTagName("td").item(index).textContent;
				cellRezult[i-1][1] = table.rows[i];
			}
			
			if (up == 0)
			{
				cellRezult.sort(comp);
				up = 1;
			}
			else 
			{
				cellRezult.reverse(comp);
				up = 0;
			}
			
			for (i=0; i<cellRezult.length; i++)
			{
				table.appendChild(cellRezult[i][1]);
			}
		}
	}
	
}

perebor(zag);
Ответить с цитированием
  #17 (permalink)  
Старый 27.07.2016, 11:46
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

gazman,
внимание на строки 80 и 99
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
</head>

<body>
<table class="sort" id="sort" align="center">
  <tr id="zag">
    <td>ID</td>
    <td>Имя</td>
    <td>Фамилия</td>
    <td>Сайт</td>
    <td>Переключалка стилей</td>
  </tr>
  <tr>
    <td>1</td>
    <td>Александр</td>
    <td>Шуркаев</td>
    <td><a href="#">htmlcoder.visions.ru</a></td>
    <td>Не-а</td>
  </tr>
  <tr>
    <td>123</td>
    <td>Пол</td>
    <td>Соуден</td>
    <td><a href="#">idontsmoke.co.uk</a></td>
    <td>Угу</td>
  </tr>
  <tr>
    <td>3</td>
    <td>Джеффри</td>
    <td>Зельдман</td>
    <td><a href="#">zeldman.com</a></td>
    <td>Угу</td>
  </tr>
  <tr>
    <td>44</td>
    <td>Аарон</td>
    <td>Будман</td>
    <td><a href="#">youngpup.net</a></td>
    <td>Не-а</td>
  </tr>
  <tr>
    <td>11</td>
    <td>Глен</td>
    <td>Мерфи</td>
    <td><a href="#">glenmurphy.com</a></td>
    <td>Не-а</td>
  </tr>
  <tr>
    <td>15</td>
    <td>Даниель</td>
    <td>Боган</td>
    <td><a href="#">waferbaby.com</a></td>
    <td>Не-а</td>
  </tr>
  <tr>
    <td>33</td>
    <td>Ден</td>
    <td>Бенджамин</td>
    <td><a href="#">hivelogic.com</a></td>
    <td>Угу</td>
  </tr>

</table>
<script>
var table = document.getElementById("sort");
var zag = document.getElementById("sort").rows[0].cells;
var stroke = document.getElementById("sort").rows;


function perebor(zg)
{

  for (i=0; i<zg.length; i++)
  {
    var up = 0;
    zg[i].onclick = function ()
    {
      index = this.cellIndex;
      cellRezult = [];

      function comp(a, b) {
        b = +b[0] || b[0];
        a = +a[0] || a[0];
        if (a > b) return 1;
        if (a < b) return -1;
      }

      for (i=1; i<table.rows.length; i++)
      {
        cellRezult[i-1] = [];
        cellRezult[i-1][0] = table.rows[i].getElementsByTagName("td").item(index).textContent;
        cellRezult[i-1][1] = table.rows[i];
      }
      cellRezult.sort(comp);
      if (up == 0)
      {

        up = 1;
      }
      else
      {
        cellRezult.reverse(comp);
        up = 0;
      }

      for (i=0; i<cellRezult.length; i++)
      {
        table.appendChild(cellRezult[i][1]);
      }
    }
  }

}

perebor(zag);

</script>

</body>
</html>
Ответить с цитированием
  #18 (permalink)  
Старый 27.07.2016, 13:14
Аспирант
Отправить личное сообщение для gazman Посмотреть профиль Найти все сообщения от gazman
 
Регистрация: 02.09.2015
Сообщений: 38

сердечно благодарю
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Непростая задача, сортировка массива Gerd199 Общие вопросы Javascript 0 15.02.2016 03:22
Сортировка массива по возрастанию другого массива. vas88811 Events/DOM/Window 4 12.01.2014 10:31
Сортировка массива grindy Общие вопросы Javascript 5 17.12.2013 08:41
Сортировка массива по ключу RazZzeR Элементы интерфейса 9 21.07.2012 19:31
сортировка массива с сохранением ассоциации индексов HelpeR Элементы интерфейса 1 24.02.2010 11:00