JSFiddle - React, Tailwind, and code Playground
HTML
<table onclick='checkCellIndex(event)' cellpadding=10 border=1>
<tr>
<td>0</td>
<td rowspan=3>a</td>
<td colspan=2>b</td>
<td>c</td>
</tr>
<tr>
<td colspan=2>1</td>
<td>d</td>
<td>e</td>
<td>f</td>
</tr>
<tr></tr>
</table>
JavaScript
checkCellIndex = function(event) {
var cell = event.target;
var table = event.currentTarget;
var grid = [];
for(var i = 0; i < table.rows.length; i++) {
var currentRow = table.rows[i];
var currentGridRow = grid[i] || (grid[i] = []);
for(var j = 0; j < currentRow.cells.length; j++) {
var currentCell = currentRow.cells[j];
var c = 0; while(currentGridRow[c]) { c++; }
for(var cx = 0; cx < Math.max(1,currentCell.colSpan|0); cx++) {
for(var rx = 0; rx < Math.max(1,currentCell.rowSpan|0); rx++) {
var gridRowToUpdate = grid[i+rx] || (grid[i+rx] = []);
gridRowToUpdate[c+cx] = gridRowToUpdate[c+cx] || currentCell;
}
}
}
}
//alert(grid.map(row => JSON.stringify(row.map(cell => cell ? cell.textContent : ''))).join('\n'));
for(var rx = 0; rx < grid.length; rx++) {
for(var cx = 0; cx < grid[rx].length; cx++) {
if(grid[rx][cx] == cell) {
alert((1+rx)+'x'+(1+cx));
rx = grid.length;
break;
}
}
}
}