Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   javascript проблемы с сортировкой! (https://javascript.ru/forum/misc/56212-javascript-problemy-s-sortirovkojj.html)

Mahylik 04.06.2015 19:25

javascript проблемы с сортировкой!
 
Код сортировка нужно сделать так чтобы сначала по Отсортировать таблицу по площади и № аудиторий. Не понимаю где я ошиблась(:help: :help:




<!DOCTYPE HTML>
<HTML>
<head>
<meta htpp-equiv="content-type"content="text/css; charset=winddows-1251">
</head>
<body>
<table id="tab" border="1" align="center">

<caption><b> Аудитории </b></caption>

<tr><th rowspan="2"> Артикул </th>
<th colspan="2"> Отвественный за аудитории </th>
<th rowspan="2"> Площадь аудитории <br> кв.м </th></tr>

<tr><td>Должность</td><td>ФИО работника</td></tr>

<tr> <td>12</td> <td>Зав. кафедрой<br> информатики </td> <td>Сидоров И.С.</td> <td>60</td></tr>
<tr> <td>22</td> <td>Зав. кафедрой<br>прочности л.а. </td> <td>Хазанов Х.С.</td> <td>30</td></tr>
<tr> <td>9</td> <td>Зав. кафедрой<br> менеджмента</td> <td>Федоров Ю.В.</td> <td>120</td></tr>
<tr> <td>45</td> <td>Секретарь кафедры<br> ин. языков</td> <td>Карамзина Л.Л.</td> <td>30</td></tr>
<tr> <td>18</td> <td>Секретарь кафедры<br> прочности л.а.</td> <td>Толстоусов П.Л.</td> <td>120</td></tr>
<tr> <td>23</td> <td>Секретарь кафедры<br> физики </td> <td>Фролов Ю.Б</td> <td>60</td></tr>

</table>
<a href="javascript:f()">Отсортировать таблицу по площади и № аудиторий</a>
</body>
<script type="text/javascript">
function zap(a,n,p,c)
{
console.log(a,n,p,c)
this.artik=a;
this.name=n;
this.proiz=p;
this.ctoem=c;
}

function q(c,b)
{
if (c.name>b.name) return -1;
else if (c.name>b.name) return 1;
else if (c.ctoem<b.ctoem) return -1;
else if (c.ctoem>b.ctoem) return 1;
else return 0;
}

function f()
{
var laba=[];
var tab=document.getElementById("tab");
var rowEl=tab.getElementsByTagName("tr")
for (var i=1; i<rowEl.length; i++)
{
var colEl=rowEl[i].getElementsByTagName("td");
console.log(colEl)
laba [i-1]=new zap (colEl[0].innerHTML,colEl[1].innerHTML,colEl[2].innerHTML,colEl[3].innerHTML);
}

laba.sort (q);
for(var i=1; i<rowEl.length; i++)
{
colEl=rowEl[i].getElementsByTagName("td");
with(laba[i-1])
{
colEl[0].innerHTML=artik;
colEl[1].innerHTML=name;
colEl[2].innerHTML=proiz;
colEl[3].innerHTML=ctoem;
}
}
}
</script>
</html>

рони 04.06.2015 19:42

Mahylik,
у вас строки для сортировки начитаются c i = 2, а не 1
Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]


О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.

иначе трудно сказать в какой строке ошибка

Mahylik 04.06.2015 19:50

Вот так:cray: ???

он начал сортировать но не по возрастанию(((



<head>
<meta htpp-equiv="content-type"content="text/css; charset=winddows-1251">
</head>
<body>
<table id="tab" border="1" align="center">

<caption><b> Аудитории </b></caption>

<tr><th rowspan="2"> Артикул </th>
<th colspan="2"> Отвественный за аудитории </th>
<th rowspan="2"> Площадь аудитории <br> кв.м </th></tr> 

<tr><td>Должность</td><td>ФИО работника</td></tr>

<tr> <td>12</td> <td>Зав. кафедрой<br> информатики </td> <td>Сидоров И.С.</td> <td>60</td></tr>
<tr> <td>22</td> <td>Зав. кафедрой<br>прочности л.а. </td> <td>Хазанов Х.С.</td> <td>30</td></tr>
<tr> <td>9</td> <td>Зав. кафедрой<br> менеджмента</td> <td>Федоров Ю.В.</td> <td>120</td></tr> 
<tr> <td>45</td> <td>Секретарь кафедры<br> ин. языков</td> <td>Карамзина Л.Л.</td> <td>30</td></tr> 
<tr> <td>18</td> <td>Секретарь кафедры<br> прочности л.а.</td> <td>Толстоусов П.Л.</td> <td>120</td></tr> 
<tr> <td>23</td> <td>Секретарь кафедры<br> физики </td> <td>Фролов Ю.Б</td> <td>60</td></tr> 

</table>
<a href="javascript:f()">Отсортировать таблицу по площади и № аудиторий</a>
</body>
<script type="text/javascript">
function zap(a,n,p,c)
{
console.log(a,n,p,c)
this.artik=a;
this.name=n;
this.proiz=p;
this.ctoem=c;
}

function q(c,b)
{
if (c.name>b.name) return -1;
else if (c.name>b.name) return 1;
else if (c.ctoem<b.ctoem) return -1;
else if (c.ctoem>b.ctoem) return 1;
else return 0;
}

function f()
{
var laba=[];
var tab=document.getElementById("tab");
var rowEl=tab.getElementsByTagName("tr")
for (var i=2; i<rowEl.length; i++)
{
var colEl=rowEl[i].getElementsByTagName("td");
console.log(colEl)
laba [i-2]=new zap (colEl[0].innerHTML,colEl[1].innerHTML,colEl[2].innerHTML,colEl[3].innerHTML);
}

laba.sort (q);
for(var i=2; i<rowEl.length; i++)
{
colEl=rowEl[i].getElementsByTagName("td");
with(laba[i-2])
{
colEl[0].innerHTML=artik;
colEl[1].innerHTML=name;
colEl[2].innerHTML=proiz;
colEl[3].innerHTML=ctoem;
}
}
}
</script>

Mahylik 04.06.2015 20:18

Спасибо, но вроде все получилось у меня вот:


<head>
<meta htpp-equiv="content-type"content="text/css; charset=winddows-1251">
</head>

<script type="text/javascript">
function zap(a,n,p,c)
{
console.log(a,n,p,c)
this.artik=a;
this.name=n;
this.proiz=p;
this.ctoem=c;
}

function q(c,b)
{
if (c.ctoem>b.ctoem) return 1;
else if (c.ctoem<b.ctoem) return -1;
else if (c.artik>b.artik) return 1;
else if (c.artik>b.artik) return -1;
else return 0;
}

function f()
{
var laba=[];
var tab=document.getElementById("tab");
var rowEl=tab.getElementsByTagName("tr")
for (var i=2; i<rowEl.length; i++)
{
var colEl=rowEl[i].getElementsByTagName("td");
console.log(colEl)
laba [i-2]=new zap (colEl[0].innerHTML,colEl[1].innerHTML,colEl[2].innerHTML,colEl[3].innerHTML);
}

laba.sort (q);
for(var i=2; i<rowEl.length; i++)
{
colEl=rowEl[i].getElementsByTagName("td");
with(laba[i-2])
{
colEl[0].innerHTML=artik;
colEl[1].innerHTML=name;
colEl[2].innerHTML=proiz;
colEl[3].innerHTML=ctoem;
}
}
}
</script>
<body>
<table id="tab" border="1" align="center">

<caption><b> Аудитории </b></caption>

<tr><th rowspan="2"> Артикул </th>
<th colspan="2"> Отвественный за аудитории </th>
<th rowspan="2"> Площадь аудитории <br> кв.м </th></tr> 

<tr><td>Должность</td><td>ФИО работника</td></tr>

<tr> <td>12</td> <td>Зав. кафедрой<br> информатики </td> <td>Сидоров И.С.</td> <td>60</td></tr>
<tr> <td>22</td> <td>Зав. кафедрой<br>прочности л.а. </td> <td>Хазанов Х.С.</td> <td>30</td></tr>
<tr> <td>9</td> <td>Зав. кафедрой<br> менеджмента</td> <td>Федоров Ю.В.</td> <td>120</td></tr> 
<tr> <td>45</td> <td>Секретарь кафедры<br> ин. языков</td> <td>Карамзина Л.Л.</td> <td>30</td></tr> 
<tr> <td>18</td> <td>Секретарь кафедры<br> прочности л.а.</td> <td>Толстоусов П.Л.</td> <td>120</td></tr> 
<tr> <td>23</td> <td>Секретарь кафедры<br> физики </td> <td>Фролов Ю.Б</td> <td>60</td></tr> 

</table>
<a href="javascript:f()">Отсортировать таблицу по площади и № аудиторий</a>
</body>

Erolast 04.06.2015 20:29

Цитата:

laba.sort (q);
Что за пробел перед круглыми скобками?

рони 04.06.2015 20:36

Mahylik,
<!DOCTYPE HTML>
 <HTML>
 <head>
<meta charset="utf-8">
 </head>
 <body>
 <table id="tab" border="1" align="center">

 <caption><b> Аудитории </b></caption>

 <tr><th rowspan="2"> Артикул </th>
 <th colspan="2"> Отвественный за аудитории </th>
 <th rowspan="2"> Площадь аудитории <br> кв.м </th></tr>

 <tr><td>Должность</td><td>ФИО работника</td></tr>

 <tr> <td>12</td> <td>Зав. кафедрой<br> информатики </td> <td>Сидоров И.С.</td> <td>60</td></tr>
 <tr> <td>22</td> <td>Зав. кафедрой<br>прочности л.а. </td> <td>Хазанов Х.С.</td> <td>30</td></tr>
 <tr> <td>9</td> <td>Зав. кафедрой<br> менеджмента</td> <td>Федоров Ю.В.</td> <td>120</td></tr>
 <tr> <td>45</td> <td>Секретарь кафедры<br> ин. языков</td> <td>Карамзина Л.Л.</td> <td>30</td></tr>
 <tr> <td>18</td> <td>Секретарь кафедры<br> прочности л.а.</td> <td>Толстоусов П.Л.</td> <td>120</td></tr>
 <tr> <td>23</td> <td>Секретарь кафедры<br> физики </td> <td>Фролов Ю.Б</td> <td>60</td></tr>

 </table>
 <a href="javascript:f()">Отсортировать таблицу по площади и № аудиторий</a>
 </body>
 <script type="text/javascript">
 function f() {
    for (var d = document.querySelector("#tab"), a = document.querySelectorAll("#tab tr:nth-child(n + 3)"), a = Array.prototype.map.call(a, function(b) {
            return b
        }).sort(function(b, a) {
            return +b.cells[3].innerHTML - +a.cells[3].innerHTML || +b.cells[0].innerHTML - +a.cells[0].innerHTML
        }), c; c = a.shift();) d.appendChild(c)
};
 </script>
 </html>

Mahylik 05.06.2015 11:51

Цитата:

Сообщение от рони (Сообщение 373862)
Mahylik,
<!DOCTYPE HTML>

 <script type="text/javascript">
 function f() {
    for (var d = document.querySelector("#tab"), a = document.querySelectorAll("#tab tr:nth-child(n + 3)"), a = Array.prototype.map.call(a, function(b) {
            return b
        }).sort(function(b, a) {
            return +b.cells[3].innerHTML - +a.cells[3].innerHTML || +b.cells[0].innerHTML - +a.cells[0].innerHTML
        }), c; c = a.shift();) d.appendChild(c)
};
 </script>
 </html>

Буду надеяться что препод примет этот скрипт(((
Спасибо за помощь!!!:thanks: :thanks:


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