Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Сортировка таблицы, ячейки которой содержат теги (https://javascript.ru/forum/events/27676-sortirovka-tablicy-yachejjki-kotorojj-soderzhat-tegi.html)

stos 20.04.2012 22:42

Сортировка таблицы, ячейки которой содержат теги
 
Доброго времени суток!
Вот возник такой вопрос.
Исходные данные:
таблица, которая содержит множество 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>

stos 20.04.2012 22:47

может не в ту ветку тему разместил :(
Ув модераторы, если не трудно и тема не там, перебросьте, пожалуйсто. Спасибо.

SindBad 22.04.2012 17:48

stos, если я верно понял задачу... используйте для сравнения свойство text, оно вернёт текст внутри элемента строкой, без тегов.

stos 22.04.2012 23:27

Цитата:

Сообщение от SindBad (Сообщение 170571)
используйте для сравнения свойство text, оно вернёт текст внутри элемента строкой, без тегов.

1. ну так я сравниваю со свойством text
2. мне не надо голый текст внутри тега.
Вы неправильно поняли задачу. Сортировка происходит тип-топ.
До сортировки я одной из ячеек есть ссылка, при нажатии которой происходит вызов функции жука. После сортировки сколько ни жму на эту ссылку - ничего не происходит :( а надо чтобы происходило.

stos 23.04.2012 00:12

причем, вот просто затестил. если прописать в ячейку ссылку на джаваскриптовскую функцию, то после сортировки все тип-топ работает.
а вот чета вызов именно функции жука - не воркает :(

stos 25.04.2012 10:13

ап, штоле..

stos 25.04.2012 22:54

неужели ни у кого нет мыслей ? :(

stos 29.04.2012 01:13

up...

stos 29.04.2012 12:47

Цитата:

Сообщение от nasqad (Сообщение 171881)
слишком длинный пост и неясное описание вопроса, по всей видимости у вас есть какая то функция которая в какой то момент не вызывается, при том в вашем примере ее нет, нипанятно

а что неясного в вопросе-то?
всё предельно просто.
исходные данные:
таблица с множеством tbody. внутри tbody есть ячейки, которые содержат ссылки на обработчик jquery. они работают без проблем. но! после того как нажал сортировку, они перестают работать. причем, если в ячейки помещать ссылки на обработчик javascript или обычные ссылки, то всё нормально.
смысла выкладывать сюда функцию жука нет смысла, т.к. перестаёт работать любая функция, даже выводящая обычны алерт!!!
вот в вкратце приведу нужны код:
код ячейки, которая содержит ссылку на обработчик жука:
<td align='center'><a id="11245-0" href="#" class="addCart">Заказать</a></td>


код сортировки, после которой перестают работать ссылки на жука:
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 = '';
	
	for (i = 2; i <= ntr; i++)
	{
		for (j=i+1; j < ntr; 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)
			{								
				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;
				
			}
		}
	}
}

stos 05.05.2012 02:21

эххх...


Часовой пояс GMT +3, время: 16:52.