JSFiddle - React, Tailwind, and code Playground
HTML
<h2>HTML Table</h2>
<body onload="myFunction()">
<table>
<tr>
<th>Company</th>
<th>Contact</th>
<th>Country</th>
</tr>
<tbody>
<tr>
<td>Alfreds Futterkiste</td>
<td>Maria Anders</td>
<td>Germanyindgo</td>
</tr>
<tr>
<td>Alfreds Futterkiste</td>
<td>Maria Anders</td>
<td>Germany</td>
</tr>
<tr>
<td>Centro comercial Moctezuma</td>
<td>Francisco Chang</td>
<td>Mexico</td>
</tr>
<tr>
<td>Ernst Handel</td>
<td>Roland Mendel</td>
<td>Austria</td>
</tr>
<tr>
<td>Island Trading</td>
<td>Helen Bennett</td>
<td>UK</td>
</tr>
<tr>
<td>Laughing Bacchus Winecellars</td>
<td>Yoshi Tannamuri</td>
<td>Canada</td>
</tr>
<tr>
<td>Magazzini Alimentari Riuniti</td>
<td>Giovanni Rovelli</td>
<td>Italy</td>
</tr>
</tbody>
</table>
</body>
CSS
table {
font-family: arial, sans-serif;
border-collapse: collapse;
width: 100%;
}
th {
background: #a9a9a9;
}
td, th {
border: 1px solid #dddddd;
text-align: center;
padding: 8px;
font-family: monospace;
font-size: 17px;
}
.dark {
background-color: #dddddd;
}
JavaScript
function myFunction() {
const firstRows = { };
let shade = false;
const colsToMerge = [0, 1];
Array.from(document.querySelectorAll('tbody tr')).forEach(tr => {
const text = tr.children[0].innerText;
if (!(text in firstRows)) {
firstRows[text] = { shade, elem: tr, count: 1 };
shade = !shade;
} else {
const firstRow = firstRows[text]
firstRow.count++;
colsToMerge.forEach(i => tr.children[i].remove());
colsToMerge.forEach(i =>
firstRow.elem.children[i]
.setAttribute('rowspan', firstRow.count)
);
}
if (firstRows[text].shade) tr.classList.add('dark');
});
}