Я ищу несколько идей о том, как этого добиться, когда я бью по стене.
У меня есть таблица, которая отображает данные, извлеченные из базы данных MySQL. Таблица представляет собой последовательность из 13 ячеек с отображаемыми данными, за которыми следует скрытая строка из одной ячейки. Скрытая строка переключается нажатием на ссылку в индексе ячейки 1 предыдущей строки. Вот так:
строка 1: щелкните эту ячейку, чтобы отобразить строку 2: еще одну ячейку: еще одну ячейку: до тошноты, пока мы не достигнем 13:
строка 2, которая скрыта
строка 3: щелкните эту ячейку, чтобы отобразить строку 2: еще одна ячейка: еще одна ячейка: до тошноты, пока мы не достигнем 13:
строка 4, которая скрыта
...
поэтому, используя jquery, я вытащил все строки, а затем установил тест, чтобы определить, была ли это отображаемая строка или скрытая строка, если она отображалась, тогда я поместил эту и следующую строки в объект, а затем поместил этот объект в другой объект, например, так:
//this function is for sorting the data in the table
$(".sort").click(function() {
//get what column we are sorting by
var sortBy = $(this).attr('sortBy');
//set the colnum to sort by
if (sortBy == "itemname") {
var sortCol = 1;
} else if (sortBy == "priority") {
var sortCol = 2;
} else if (sortBy == "livedate") {
var sortCol = 10;
} else if (sortBy == "status") {
var sortCol = 11;
} else if (sortBy == "designer") {
var sortCol = 12;
}
//get the table data
var tableData = getTableData("NO", "null", "YES", sortBy);
//get all the rows
var tableRowArray = $("#productTableBody tr");
//declare new table object
var tableObj = new Object;
var rowPackage = new Object;
//loop through tableRowArray and put rows into packages of two, the main row and the hidden row
for(var t=0; t<tableRowArray.length; t++) {
if($(tableRowArray[t]).children(":first").attr('class') == "colorCode") {
rowPackage[t] = $(tableRowArray[t]).children();
rowPackage[t+1] = $(tableRowArray[t+1]).children();
//dump rows into tableObj
tableObj[t] = rowPackage;
}
//clean out rowPackage
rowPackage = {};
}
var x=-2;
for(thisRow in tableObj) {
x = x+2;
var sortItem = $(tableObj[thisRow][x][sortCol]).html();
//ack! -->getting stumped here
}
});
Я также собрал столбец, по которому пользователь хочет отсортировать. Затем я могу найти ячейку, по которой пользователь хочет отсортировать. Я знаю, что мне нужно вытащить эту информацию, поместить в массив и отсортировать, но я думаю, что я озадачен тем, как применить отсортированный массив обратно к своему tableObj, чтобы я мог переписать тело таблицы HTML ... причина, по которой я озадачен является то, что некоторые из данных, которые будут отсортированы, будут идентичны, например, если сортировка по конструктору, данные могут быть этим {"a", "b", "c", "c", "a", "a", " «a»}, который при сортировке будет a, a, a, a, b, c, c, но поскольку некоторые из них идентичны, я не могу вернуться назад и перебрать объект и найти запись, которая соответствует первому элементу в мой отсортированный массив, 4 элемента будут соответствовать ему. Так как мне определить, какая запись в объекте соответствует первой позиции в отсортированном списке?
Заранее спасибо.