Вопрос по JavaScript.
Сайт потихоньку себе делаю, нужна сортировка таблицы. В интернете поискал - в итоге нашёл приличную, попытался понять - но учил я перед эти Delhi, а AngelScript уже напугал меня своими "&&", "!", "?". Я вообще давно не делал ничего в Паскале/Делфи. Так что уже мало что помню. И тут понял что без библиотеки функций мне не разобраться, в интернете не нашёл. В общем код таков:
var grid = document.getElementById('r5');
grid.onclick = function(e) {
var target = e && e.target || window.event.srcElement;
if (target.tagName != 'TH') return;
sortGrid(target.cellIndex, target.getAttribute('data-type'));
};
function sortGrid(colNum, type) {
var tbody = grid.getElementsByTagName('tbody')[0];
var rowsArray = [];
for(var i = 0; i < tbody.children.length; i++) {
rowsArray.push(tbody.children[i]);
}
var compare;
switch(type) {
case 'string':
compare = function(rowA, rowB) {
return rowA.cells[colNum].innerHTML > rowB.cells[colNum].innerHTML? 1 : -1;
};
break;
}
rowsArray.sort(compare);
grid.removeChild(tbody);
while(tbody.firstChild) {
tbody.removeChild(tbody.firstChild);
}
for(var i=0; i < rowsArray.length; i++) {
tbody.appendChild(rowsArray[i]);
}
grid.appendChild(tbody);
}
Очень непонятное опять же присваивании массива, я привык к такому: a: array[5..15]. А тут - rowsArray = [];
Ладно, в итоге
var tbody = grid.getElementsByTagName('tbody')[0];
var rowsArray = [];
for(var i = 0; i < tbody.children.length; i++) {
rowsArray.push(tbody.children[i]);
Я понял что берут весь tbody, создают массив rowsArray, проблема то возникла в самом: .children.length. (что за "ребёнок" - долго думал), в итоге понял что это строка и их количество. (хотя length - длинна) И там каждому индексу массива присваивается строка.
А теперь к самой проблеме: объясните пожалуйста синтаксис следующих вещей - var compare;
switch(type) {
case 'string':
compare = function(rowA, rowB) {
return rowA.cells[colNum].innerHTML > rowB.cells[colNum].innerHTML? 1 : -1;
};
break;
}
rowsArray.sort(compare);
grid.removeChild(tbody);
while(tbody.firstChild) {
tbody.removeChild(tbody.firstChild);
}
А так же скажите - нормальный ли этот скрипт если его дополнять? Или он не даст много возможностей?
Мне вот надо по дате сортировку сделать - правда не хочу под каждый месяц свою таблицу. Что бы сортировалась по дате формата: ДД. ММ. ГГГГ, на сколько я помню - в Паскале или Делфи можно снять в один Стринг 2 первых символа, во второй с 4-го по 5-ой знаки. И в третий с 7-го по последний. Как это тут сделать?
Поменять сортировку с большего на меньший я понял можно заменив rowA на rowB и обратно, вот только где прописаны эти переменные в том коде? Или это вообще не переменные? А так же как многоэтапную сортировку сделать? То есть сначала по столбцу 4, а потом по столбцу 2 или 1?
P.S. Самого сайта в сети нет, только на компьютере.
Буду благодарен за объяснение, или если не сложно за код сортировки или даты.
По-моему JS ближе к Си, чем к паскалю или дельфе, так-что вот, по поводу var compare - двухмерный массив (хотя я тоже плохо помню)