Reputation: 25
I have 3 tables and at a moment I am selecting any 2 tables and I want to show the difference of each row element of selected tables in a popup in a different column along with the tables .I am stuck here how to compute the difference between the each row of two selected tables. How can i iterate both the tables and then get the result?
var selectedRows = document.getElementsByClassName('selected');
limit = 0; //set limit
checkboxes = document.querySelectorAll('.checkboxdiv input[type="checkbox"]');
function checker(elem) {
if (elem.checked) {
limit++;
} else {
limit--;
}
for (i = 0; i < checkboxes.length; i++) {
if (limit == 2) {
if (!checkboxes[i].checked) {
checkboxes[i].disabled = true;
}
} else {
if (!checkboxes[i].checked) {
checkboxes[i].disabled = false;
}
}
}
}
for (i = 0; i < checkboxes.length; i++) {
checkboxes[i].onclick = function () {
checker(this);
}
}
var checkedArray;
function myFunction(event) {
event.target.parentElement.parentElement.className =
event.target.checked ? 'selected' : '';
var elements = document.getElementsByTagName("INPUT");
checkedArray = new Array();
for (var i = 0; i < elements.length; i++) {
if (elements[i].type === 'checkbox' && elements[i].checked) {
checkedArray.push(elements[i].id);
}
}
console.log(checkedArray);
}
function clickbtn() {
// var table;
// for (let i = 0; i < checkedArray.length; i++) {
// console.log("c", checkedArray[i])
// table = new Array();
// for (let i = 0; i < checkedArray.length; i++) {
// table.push("table" + checkedArray[i])
// }
// console.log(table)
// }
// for (let i = 0; i < table.length; i++) {
// var t1 = document.getElementById(table[i]);
// var t2 = document.getElementById(table[i + 1]);
// }
const buildTable = (arr) => {
let table = document.querySelector("#diff-table");
if (table) table.remove();
table = document.createElement("table");
table.id = "diff-table";
const thead = document.createElement("thead"),
thA = document.createElement("th"),
thB = document.createElement("th"),
thDiff = document.createElement("th");
thA.innerText = "Plan A";
thB.innerText = "Plan B";
thDiff.innerText = "Difference";
thead.append(thA, thB, thDiff);
table.append(thead);
arr.forEach((i) => {
const tr = document.createElement("tr"),
tdA = document.createElement("td"),
tdB = document.createElement("td"),
tdDiff = document.createElement("td");
tdA.innerText = "$" + i["planA"];
tdB.innerText = "$" + i["planB"];
tdDiff.innerText = "$" + i["diff"];
tr.append(tdA, tdB, tdDiff);
table.append(tr);
});
document.body.append(table);
};
const checked = document.querySelectorAll(":checked"),
arr = [];
if (checked.length !== 2) return;
const planA = document
.querySelector(":checked:first-of-type")
.closest("table")
.querySelectorAll("td");
const planB = document
.querySelector(":checked:last-of-type")
.closest("table")
.querySelectorAll("td");
planA.forEach((cell, i) => {
const valA = +cell.innerText.replace(/[^\d.-]/g, '');
const valB = +planB[i].innerText.replace(/[^\d.-]/g, '');
arr.push(valA - valB);
});
buildTable(arr);
}
.table_container{
float:left;
width:25%;
}
.container::after{
content: "";
clear: both;
display: table;
}
table{
margin: 0 auto;
border-radius: 10px;
}
tr{
padding: 15px;
text-align: center;
}
td{
color: black;
text-align: center;
vertical-align: middle;
border: 1px double white;
height: 50px;
background-color: #e1edf9;
width:272px;
}
.sub_text{
font-size: 12px;
font-style: italic;
color: #0071ce;
font-weight: 100;
}
th{
background-color: #0071ce;
text-align: center;
padding: 10px;
border-top-left-radius: 10px;
border-top-right-radius: 10px;
color: white;
font-weight: bold;
}
.header{
color: #0071ce;
font-weight: bold;
padding: 10px;
}
Upvotes: 0
Views: 72
Reputation: 315
Here's the solution I built.
NOTES I removed INLINE JS. You will have to design your own CSS for the newly created element called #diff-table
. Also, this checks to make sure EXACTLY 2 plans were selected (if no plans, 1 plan, or 3 plans were selected, it will not run).
const btn = document.querySelector("button");
btn.addEventListener("click", () => {
const checked = document.querySelectorAll(":checked"),
arr = [];
if (checked.length !== 2) return;
const plans = document.querySelectorAll(":checked"),
planA = plans[0].closest("table").querySelectorAll("td"),
planB = plans[1].closest("table").querySelectorAll("td");
planA.forEach((cell, i) => {
const valA = +cell.innerText.replace(/[^\d.-]/g, '');
const valB = +planB[i].innerText.replace(/[^\d.-]/g, '');
arr.push({ planA: valA, planB: valB, diff: valA - valB });
});
buildTable(arr);
});
const buildTable = (arr) => {
let table = document.querySelector("#diff-table");
if (table) table.remove();
table = document.createElement("table");
table.id = "diff-table";
const thead = document.createElement("thead"),
thA = document.createElement("th"),
thB = document.createElement("th"),
thDiff = document.createElement("th");
thA.innerText = "Plan A";
thB.innerText = "Plan B";
thDiff.innerText = "Difference";
thead.append(thA, thB, thDiff);
table.append(thead);
arr.forEach((i) => {
const tr = document.createElement("tr"),
tdA = document.createElement("td"),
tdB = document.createElement("td"),
tdDiff = document.createElement("td");
tdA.innerText = "$" + i["planA"];
tdB.innerText = "$" + i["planB"];
tdDiff.innerText = "$" + i["diff"];
tr.append(tdA, tdB, tdDiff);
table.append(tr);
});
document.body.append(table);
};
Upvotes: 1
Reputation: 10221
myTable1.querySelectorAll("td")
will give you list of TD
from which you can extract the content:
var checkedArray;
function myFunction()
{
var elements = document.getElementsByTagName("INPUT");
checkedArray = new Array();
for(var i=0;i<elements.length;i++)
{
if(elements[i].type === 'checkbox' && elements[i].checked)
{
checkedArray.push(elements[i].value);
}
}
console.log(checkedArray);
var data = {}
for (var i = 0; i < checkedArray.length; i++)
{
var table = document.getElementById(checkedArray[i]),
td = table.querySelectorAll("td"),
info = [];
for(var t = 0; t < td.length; t++)
{
info[info.length] = td[t].textContent;
}
data[checkedArray[i]] = info;
}
console.log(data);
}
function clickbtn(){
var table;
for(let i=0; i< checkedArray.length; i++){
console.log("c",checkedArray[i])
table = new Array();
for(let i=0; i< checkedArray.length; i++){
table.push("table"+checkedArray[i])
}
console.log(table)
}
for(let i=0; i< table.length; i++){
var t1 = document.getElementById(table[i]);
var t2 = document.getElementById(table[i+1]);
$('#t tr').each(function(){
$(this).find('td').each(function(){
})
})
}
}
.table_container{
float:left;
width:25%;
}
.container::after{
content: "";
clear: both;
display: table;
}
table{
margin: 0 auto;
border-radius: 10px;
}
tr{
padding: 15px;
text-align: center;
}
td{
color: black;
text-align: center;
vertical-align: middle;
border: 1px double white;
height: 50px;
background-color: #e1edf9;
width:272px;
}
.sub_text{
font-size: 12px;
font-style: italic;
color: #0071ce;
font-weight: 100;
}
th{
background-color: #0071ce;
text-align: center;
padding: 10px;
border-top-left-radius: 10px;
border-top-right-radius: 10px;
color: white;
font-weight: bold;
}
.header{
color: #0071ce;
font-weight: bold;
padding: 10px;
}
<div class="container">
<div class="table_container">
<table>
<tr><th colspan="2">Cost</th></tr>
<tr>
<td class="header" rowspan="4">paycheck<br>
<span class="sub_text">rates shown</span>
</td>
<td>Associate Only</td>
<tr><td>A</td></tr>
<tr><td>B</td></tr>
<tr><td>C</td></tr>
</tr>
<tr>
<td class="header" rowspan="2">Contribution<br>
<span class="sub_text">
</span>
</td>
<td>Associate</td>
<tr><td>B</td></tr>
</tr>
<tr>
<td class="header" rowspan="2">Annual<br>
<span class="sub_text">in-network care</span>
</td>
<td>A</td>
<tr><td>B</td></tr>
</tr>
<tr>
<td class="header" rowspan="2">Max<br>
<span class="sub_text">in-network care</span>
</td>
<td>Per person</td>
<tr><td>Entire family</td></tr>
</tr>
</table>
</div>
<div class="table_container">
<table id="table1">
<tr><th>Plan<input type="checkbox" id="1" name="table1" value="table1" onchange="myFunction()"> </th>
</tr>
<tr>
<td>$33.90</td>
</tr>
<tr>
<td>$161.30</td>
</tr>
<tr>
<td>$53.30</td>
</tr>
<tr>
<td>$186.20</td>
</tr>
<tr>
<td>HSA match:up to $350</td>
</tr>
<tr>
<td>HSA match:up to $700</td>
</tr>
<tr>
<td>$3000</td>
</tr>
<tr>
<td>$6000</td>
</tr>
<tr>
<td>$6650</td>
</tr>
<tr>
<td>$13300</td>
</tr>
</table>
</div>
<div class="table_container">
<table id="table2">
<tr><th>Plan<input type="checkbox" id="2" name="table2" value="table2" onchange="myFunction()"></th>
</tr>
<tr>
<td>$33.90</td>
</tr>
<tr>
<td>$161.30</td>
</tr>
<tr>
<td>$53.30</td>
</tr>
<tr>
<td>$186.20</td>
</tr>
<tr>
<td>HSA match:up to $350</td>
</tr>
<tr>
<td>HSA match:up to $700</td>
</tr>
<tr>
<td>$3000</td>
</tr>
<tr>
<td>$6000</td>
</tr>
<tr>
<td>$6650</td>
</tr>
<tr>
<td>$13300</td>
</tr>
</table>
</div>
<div class="table_container">
<table id="table3">
<tr><th>Plan<input type="checkbox" id="3" name="table3" value="table3" onchange="myFunction()"> </th>
</tr>
<tr>
<td>$33.90</td>
</tr>
<tr>
<td>$161.30</td>
</tr>
<tr>
<td>$53.30</td>
</tr>
<tr>
<td>$186.20</td>
</tr>
<tr>
<td>HSA match:up to $350</td>
</tr>
<tr>
<td>HSA match:up to $700</td>
</tr>
<tr>
<td>$3000</td>
</tr>
<tr>
<td>$6000</td>
</tr>
<tr>
<td>$6650</td>
</tr>
<tr>
<td>$13300</td>
</tr>
</table>
</div>
</div>
<button onclick = "clickbtn()">Click Me</button>
Upvotes: 0