Показать сообщение отдельно
  #1 (permalink)  
Старый 20.04.2012, 22:42
Интересующийся
Отправить личное сообщение для stos Посмотреть профиль Найти все сообщения от stos
 
Регистрация: 26.12.2011
Сообщений: 28

Сортировка таблицы, ячейки которой содержат теги
Доброго времени суток!
Вот возник такой вопрос.
Исходные данные:
таблица, которая содержит множество tbody, каждый из которых становится видимым при определенных телодвижениях.
Понадобилось возможность сортировки. Для сортировки есть два поля. Ну и, соответственно, по возрастанию или убыванию.

Написал функцию сортировки. Чета мне подсказывает, что она весьма и весьма топорная. Но к моему удивлению она сортирует строки. Причем, правильно
Я уже было начал пить и хороводы водить, но тут выяснилось, что перестала работать другая функция. Пытаюсь отслеживать что оказывается внутри ячеек после сортировки - показывает, что там все тип-топ. Тогда возникает вопрос, почему не работает

Поскольку, функция корзины работала и до сортировки, то ее я сюда кидать не буду. Скину лишь код сортировки в надежде, что отцы подскажут направление, верный путь и все такое.
Если боян и не нашел ответы существующие - сильно не пинайте, пожурите и подскажите ссылку.

Спасибо.

function sort_up(ntbody,nc)
{
	var ntb = document.getElementById(ntbody);
	var ntr = ntb.rows.length;
	var a = '';
	var a1 = '';
	var a2 = '';
	var a3 = '';
	var a4 = '';
	var a5 = '';
	var a6 = '';
	var a7 = '';
	
	//alert(ntr);
	for (i = 2; i <= ntr; i++)
	{
		//alert('i=' + i);
		for (j=i+1; j < ntr; j++)
		{
			//alert('j=' + j);
			if (nc == 4)
			{
				ll = parseFloat(ntb.rows[j].cells[nc].innerText);
				rr = parseFloat(ntb.rows[i].cells[nc].innerText);
			}
			
			if (nc == 1)
			{
				ll = ntb.rows[j].cells[nc].innerText;
				rr = ntb.rows[i].cells[nc].innerText;
			}
			
			if (ll < rr)
			{
				//alert('YES !!!' + ntb.rows[j].cells[4].innerText + ' < ' + ntb.rows[i].cells[4].innerText);
				
				a = ntb.rows[i].cells[0].innerHTML;
				a1 = ntb.rows[i].cells[1].innerHTML;
				a2 = ntb.rows[i].cells[2].innerHTML;
				a3 = ntb.rows[i].cells[3].innerHTML;
				a4 = ntb.rows[i].cells[4].innerHTML;
				a5 = ntb.rows[i].cells[5].innerHTML;
				a6 = ntb.rows[i].cells[6].innerHTML;
				a7 = ntb.rows[i].cells[7].innerHTML;
				
				ntb.rows[i].cells[0].innerHTML = ntb.rows[j].cells[0].innerHTML;
				ntb.rows[i].cells[1].innerHTML = ntb.rows[j].cells[1].innerHTML;
				ntb.rows[i].cells[2].innerHTML = ntb.rows[j].cells[2].innerHTML;
				ntb.rows[i].cells[3].innerHTML = ntb.rows[j].cells[3].innerHTML;
				ntb.rows[i].cells[4].innerHTML = ntb.rows[j].cells[4].innerHTML;
				ntb.rows[i].cells[5].innerHTML = ntb.rows[j].cells[5].innerHTML;
				ntb.rows[i].cells[6].innerHTML = ntb.rows[j].cells[6].innerHTML;
				ntb.rows[i].cells[7].innerHTML = ntb.rows[j].cells[7].innerHTML;
				
				ntb.rows[j].cells[0].innerHTML = a;
				ntb.rows[j].cells[1].innerHTML = a1;
				ntb.rows[j].cells[2].innerHTML = a2;
				ntb.rows[j].cells[3].innerHTML = a3;
				ntb.rows[j].cells[4].innerHTML = a4;
				ntb.rows[j].cells[5].innerHTML = a5;
				ntb.rows[j].cells[6].innerHTML = a6;
				ntb.rows[j].cells[7].innerHTML = a7;
				
			}
			else
			{
				//alert('NO !!!' + ntb.rows[j].cells[4].innerText + ' > ' + ntb.rows[i].cells[4].innerText);
			}
		}
	}
}

function sort_down(ntbody,nc)
{
	var ntb = document.getElementById(ntbody);
	var ntr = ntb.rows.length;
	var a = '';
	var a1 = '';
	var a2 = '';
	var a3 = '';
	var a4 = '';
	var a5 = '';
	var a6 = '';
	var a7 = '';
	
	//alert(nc);
	for (i = 2; i <= ntr; i++)
	{
		//alert('i=' + i);
		for (j=i+1; j < ntr; j++)
		{
			//alert('j=' + j);
			if (nc == 4)
			{
				ll = parseFloat(ntb.rows[j].cells[nc].innerText);
				rr = parseFloat(ntb.rows[i].cells[nc].innerText);
			}
			
			if (nc == 1)
			{
				ll = ntb.rows[j].cells[nc].innerText;
				rr = ntb.rows[i].cells[nc].innerText;
			}
			
			if (ll > rr)
			{
				//alert('YES !!!' + ntb.rows[j].cells[4].innerText + ' < ' + ntb.rows[i].cells[4].innerText);
				
				a = ntb.rows[i].cells[0].innerHTML;
				a1 = ntb.rows[i].cells[1].innerHTML;
				a2 = ntb.rows[i].cells[2].innerHTML;
				a3 = ntb.rows[i].cells[3].innerHTML;
				a4 = ntb.rows[i].cells[4].innerHTML;
				a5 = ntb.rows[i].cells[5].innerHTML;
				a6 = ntb.rows[i].cells[6].innerHTML;
				a7 = ntb.rows[i].cells[7].innerHTML;
				
				ntb.rows[i].cells[0].innerHTML = ntb.rows[j].cells[0].innerHTML;
				ntb.rows[i].cells[1].innerHTML = ntb.rows[j].cells[1].innerHTML;
				ntb.rows[i].cells[2].innerHTML = ntb.rows[j].cells[2].innerHTML;
				ntb.rows[i].cells[3].innerHTML = ntb.rows[j].cells[3].innerHTML;
				ntb.rows[i].cells[4].innerHTML = ntb.rows[j].cells[4].innerHTML;
				ntb.rows[i].cells[5].innerHTML = ntb.rows[j].cells[5].innerHTML;
				ntb.rows[i].cells[6].innerHTML = ntb.rows[j].cells[6].innerHTML;
				ntb.rows[i].cells[7].innerHTML = ntb.rows[j].cells[7].innerHTML;
				
				ntb.rows[j].cells[0].innerHTML = a;
				ntb.rows[j].cells[1].innerHTML = a1;
				ntb.rows[j].cells[2].innerHTML = a2;
				ntb.rows[j].cells[3].innerHTML = a3;
				ntb.rows[j].cells[4].innerHTML = a4;
				ntb.rows[j].cells[5].innerHTML = a5;
				ntb.rows[j].cells[6].innerHTML = a6;
				ntb.rows[j].cells[7].innerHTML = a7;
				
			}
			else
			{
				//alert('NO !!!' + ntb.rows[j].cells[4].innerText + ' > ' + ntb.rows[i].cells[4].innerText);
			}
		}
	}
}


На всякий случай, скину нтмл-код
<tbody style='display: none; background: #fff' id="tbody_7">
<tr>
<th colspan='8' align='center'><font color='maroon'>Корпуса</font></th>
</tr>
<tr>
<th align='center' style='border: solid 1px black;' width='20'><span>Код товара</span></th>
<th align='center' style='border: solid 1px black;' width='470'><span>Наименование</span><img src='images/down.gif' onclick="sort_down('tbody_7','1')" title='Упорядочить по убыванию'><img src='images/up.gif' onclick="sort_up('tbody_7','1')" title='Упорядочить по возрастанию'></th> 
<th align='center' style='border: solid 1px black;' width='50'><span>ЦПП</span></th>
<th align='center' style='border: solid 1px black;' width='20'><span>Кол-во</span></th>
<th align='center' style='border: solid 1px black;' width='20'><span>Цена, $</span><img src='images/down.gif' onclick="sort_down('tbody_7','4')" title='Упорядочить по убыванию'><img src='images/up.gif' onclick="sort_up('tbody_7','4')" title='Упорядочить по возрастанию'></th>
<th align='center' style='border: solid 1px black;' width='20'><span>Гарантия</span></th>
<th></th>
<th></th>
</tr>
<tr>
<td align='center' width='20'>11245</td><td width='470'><span id="11245">Корпус Topun TP-638J Black+Blu</span></td><td align='center' width='50'>291100</td><td align='center' width='20'> * </td><td align='center' width='20'>0</td>
<td align='center' width='20'>11 мес.</td>
<td align='center'><input type='text' id="q_11245" size='2' vslue=''></td>
<td align='center'><a id="11245-0" href="#" class="addCart">Заказать</a></td>
</tr>
<tr>
<td align='center' width='20'>10693</td><td width='470'><span id="10693">Корпус Topun TP-QH218 500W Black+Red</span></td><td align='center' width='50'>262400</td><td align='center' width='20'> * </td><td align='center' width='20'>34.4</td>
<td align='center' width='20'>11 мес.</td>
<td align='center'><input type='text' id="q_10693" size='2' vslue=''></td>
<td align='center'><a id="10693-34.4" href="#" class="addCart">Заказать</a></td>
</tr>
<tr>
<td align='center' width='20'>10439</td><td width='470'><span id="10439">Корпус Topun TP-QH218 Black+Red</span></td><td align='center' width='50'>291100</td><td align='center' width='20'> * </td><td align='center' width='20'>38.163</td>
<td align='center' width='20'>11 мес.</td>
<td align='center'><input type='text' id="q_10439" size='2' vslue=''></td>
<td align='center'><a id="10439-38.163" href="#" class="addCart">Заказать</a></td>
</tr>
<tr>
<td align='center' width='20'>10440</td><td width='470'><span id="10440">Корпус Topun TP-QH603 400W Black+Violet</span></td><td align='center' width='50'>213200</td><td align='center' width='20'> * </td><td align='center' width='20'>27.95</td>
<td align='center' width='20'>11 мес.</td>
<td align='center'><input type='text' id="q_10440" size='2' vslue=''></td>
<td align='center'><a id="10440-27.95" href="#" class="addCart">Заказать</a></td>
</tr>
</tbody>
Ответить с цитированием