<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Title</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<link rel="stylesheet" href="assets/css/style.css">
</head>
<body>
<div class="container">
<div class="row">
</div>
</div>
<script src="assets/js/polyfills.js"></script>
<script src="assets/dist/bundle.js"></script>
</body>
</html>
tr{
margin: 10px 0;
}
td{
text-align: center;
cursor: pointer;
padding: 5px;
border: 1px black solid;
}
.row_sum{
background: #3F51B5;
color: #fff;
}
const helperFunctions = {
randomInt: function () {
return parseInt(Math.floor(100 + Math.random() * 900));
},
add: function (a,b) {
return a+b;
}
};
let TableConstructor = {
increment: 0,
init(rows,columns){
this.rows = rows;
this.columns = columns;
this.matrix = this.generateMatrix();
},
generateMatrix(){
let arr = [];
for(let i=0; i<this.rows; i++){
arr[i] = [];
for(let j=0; j<this.columns; j++){
arr[i][j] = {id: this.increment++, amount: helperFunctions.randomInt()};
}
}
return arr;
},
drawTable(table){
let tableContainer = document.getElementsByClassName('row')[0];
let tableRow;
let tableData;
let row, col;
this.drawnTable = document.createElement('table');
this.drawnTable.className = 'table';
for (row = 0; row < table.length; row++){
tableRow = document.createElement('tr');
for (col = 0; col < table[row].length; col++){
tableData = document.createElement('td');
tableData.id = table[row][col].id;
tableData.innerHTML = table[row][col].amount;
tableRow.appendChild(tableData);
}
this.drawnTable.appendChild(tableRow);
}
tableContainer.appendChild(this.drawnTable);
this.calculateRowSum();
this.calculateColumnMid();
},
calculateRowSum(){
let tableRows = [...this.drawnTable.getElementsByTagName('tr')];
for(let i = 0; i<tableRows.length; i++){
let oneRowTd = [...tableRows[i].querySelectorAll('td')];
let oneRowTdValues = oneRowTd.map(td=>parseInt(td.innerHTML));
let oneRowSum = oneRowTdValues.reduce(helperFunctions.add, 0 );
let rowSumTd = tableRows[i].insertCell(oneRowTd.length);
rowSumTd.innerHTML = oneRowSum;
rowSumTd.className = 'row_sum';
}
},
calculateColumnMid(){
let columnValues = {};
let tableRows = [...this.drawnTable.getElementsByTagName('tr')];
for(let i = 0; i<tableRows.length; i++){
let oneRowTd = [...tableRows[i].querySelectorAll('td')];
oneRowTd.map((i)=>{
if(i.className!='row_sum'){
console.log(i);
}
});
}
console.log(columnValues);
}
};
TableConstructor.init(3, 3);
TableConstructor.drawTable(TableConstructor.matrix);
function addToCell(e) {
if(e.target.id){
//console.log(e.target.cellIndex);
let clickedRow = document.getElementById(e.target.id).closest('tr');
let clickedRowSum = clickedRow.getElementsByClassName('row_sum')[0];
clickedRowSum.innerHTML = parseInt(clickedRowSum.innerHTML) + 1;
e.target.innerHTML = parseInt(e.target.innerHTML) + 1;
}
}
let events = {
addCellHandler: function () {
let allTd = [...document.querySelectorAll('td')];
for(let i=0; i<allTd.length; i++){
allTd[i].addEventListener('click', addToCell)
}
}
};
events.addCellHandler();
This Pen doesn't use any external JavaScript resources.