Tengo una tabla HTML que contiene ROWSPAN y COLSPAN.¿Cómo puedo encontrar la "ubicación visual" de cada celda de tabla usando jQuery?
¿Cómo puedo encontrar la "ubicación visual" de cada celda usando jQuery?
Por ejemplo, aquí es una representación visual de mi mesa, de cada celda llena con lo que el algoritmo de "localización visual" debe devolver:
(Nota: lo único que realmente importa acerca de las células dentro de la <tbody>
y la referencia de columna se puede un entero, no un carácter alfabético, sólo he hecho esto para poner de relieve el problema fácilmente)
+--+--+--+--+--+
| |A |B |C |D |
+--+--+--+--+--+
|1 |A1|B1 |D1|
+--+--+--+--+ +
|2 |A2 |C2| |
+--+ +--+ +
|3 | |C3| |
+--+--+--+--+--+
|4 |A4|B4|C4|D4|
+--+--+--+--+--+
|XYZ |
+--+--+--+--+--+
he intentado aplicar la primera, sin embargo, la referencia de la celda C3 es inexacta, ya que no toma en cuenta ROWSPANS. El segundo enlace puede fusionarse en la solución del primero, pero no puedo entender cómo.
- Working with tables in jQuery | My Tech World
- What's the most efficient way to retrieve the column of rows affected by a "rowspan"? - Stack Overflow
estoy esperando a utilizar esto como una función llamada getCellLocation(cell)
que devolverá una matriz asociativa que devuelve la ubicación de algo como esto:
function getCellLocation(cell)
{
var row_number = parseInt($(cell).parent().prevAll().length) + 1;
var col_number = 1;
$(cell).prevAll('td').each(function() {
col_number += $(this).attr('colspan') ? parseInt($(this).attr('colspan')) : 1;
});
var location = new Array();
location['row'] = row_number;
location['col'] = col_number;
location['index'] = $('td').index(cell) + 1;
return location;
}
$('table td').each(function(i){
var cell = getCellLocation($(this));
$(this).prepend('<span class="ref">R' + cell['row'] + ':C' + cell['col'] + ':D' + cell['index'] + '</span>');
});
Aquí está el código HTML de la tabla de ejemplo:
<table border="1" cellspacing="0">
<thead>
<tr>
<th></th>
<th>A</th>
<th>B</th>
<th>C</th>
<th>D</th>
</tr>
</thead>
<tbody>
<tr>
<th>1</th>
<td>A1</td>
<td colspan="2">B1</td>
<td rowspan="3">D1</td>
</tr>
<tr>
<th>2</th>
<td rowspan="2" colspan="2">A2</td>
<td>C2</td>
</tr>
<tr>
<th>3</th>
<td>C3</td>
</tr>
<tr>
<th>4</th>
<td>A4</td>
<td>B4</td>
<td>C4</td>
<td>D4</td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="5">XYZ</td>
</tr>
</tfoot>
</table>
<style> span { background-color: #ffc; margin-right: .5em;} </style>
y aquí está la jsFiddle de ella: http://jsfiddle.net/bcnEW/ –
Parece que hay un pequeño problema o doble recuento en algunos escenarios. Considere el resultado cuando se aplica a esta tabla (vea la celda Col3 Row2): [http://jsfiddle.net/tUn54/](http://jsfiddle.net/tUn54/) – Turgs
actualizó mi respuesta y el violín: http: //jsfiddle.net/bcnEW/1/ –