Подсчитать суму в ячейках таблицы по каждой подгрупе
http://jsfiddle.net/j4n87xvy/7/
Как просуммировать столбцы. В Area сумма всех Value В V1 сумма всех Area В Сity_1_district сумма всех V И так до самого верха |
noomad,
Вопрос в том как посчитать сумму ячеек или как решить вашу задачу? Если первое, то могу показать. Если второе, то вы просите готовый скрипт с нуля и делайте сами свой эксель. Если интересен алгоритм решения могу кинуть идею. |
Буду рад любому конструктивному ответу. Написать скрипт с нуля точно под мою задачу не прошу.
|
noomad,
ок. Посчитать сумму данных в столбце можно например так: <table> <tr> <td>Сумма</td> <td></td> </tr> <tr> <td>Кастрюли</td> <td>10</td> </tr> <tr> <td>Ящики</td> <td>2</td> </tr> <tr> <td>Тигры</td> <td>12</td> </tr> </table> <script> var lines = document.querySelectorAll("tr"), summ = 0; for (var i = 1; i < lines.length; i++) { summ += parseInt(lines[i].querySelectorAll("td")[1].innerHTML); } lines[0].querySelectorAll("td")[1].innerHTML = summ; </script> Теперь по алгоритму. Тут уже сложнее. Ну для начала вам надо получить строки таблицы (это уже описано выше). Затем я бы шел по строкам снизу вверх (то есть от i = lines.length-1) и считал сумму всех value. Как только мы встретили первый не value мы записываем в него сумму, обнуляем и идем дальше пока не кончатся все value. Потом заново идем по всем строкам (или в первом проходе заодно фильтруем и убираем отсуммированные строки) и считаем следующий по иерархии элемент. И так доконца. Я бы посоветовал расставить более вразумительные классы или атрибуты чтобы было проще понимать когда надо переходить к следующей группе подсчетов/на следующий круг. Надеюсь понятно написал. |
Цитата:
|
tsigel большое спасибо за пример и алгоритм я даже не знал как к этому подойти. Вот мое решение
function count_group_value (){ var tr = $("#work_report tr:visible"); var td = tr[1].querySelectorAll("td"); var sum = 0; for (var depth = 5; depth >= 0; depth-- ) { for (var j = 1; j < td.length; j++ ) { for (var i = tr.length - 1; i >= 0; i--) { if ($(tr[i]).hasClass('depth_' + depth)) { sum += parseInt(tr[i].querySelectorAll("td")[j].innerHTML) || 0; } if ($(tr[i]).hasClass('depth_'+ (depth-1))) { tr[i].querySelectorAll("td")[j].innerHTML = sum; sum = 0; } } } } } |
Часовой пояс GMT +3, время: 07:26. |