Hola
ivanillo, bienvenido al foro:
A mi a veces tanto
childNode me da un poco de miedo, nunca sabes si va a coger una etiqueta HTML o un nodo de texto en blanco (tabulaciones, espacios en el código...).
Lo que hago normalmente para navegar por nodos es utilizar un
while y voy profundizando hasta que llego a la etiqueta que busco. Pero en este caso con coger todos los hijos TD creo que vale:
Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script type="text/javascript">
var anteriorFilaSeleccionada = null;
function selecciona(fila){
if( anteriorFilaSeleccionada )
anteriorFilaSeleccionada.style.backgroundColor = '#FFFFFF';
fila.style.backgroundColor = '#BBBBBB';
anteriorFilaSeleccionada = fila;
var celdasEnFila = fila.getElementsByTagName("TD");
for(var j=0; j<celdasEnFila.length; j++) {
alert(celdasEnFila[j].firstChild.nodeValue);
}
}
</script>
</head>
<body>
<table width="500" border="1" id="tablaid">
<tr onclick="selecciona(this)">
<td>a</td>
<td>b</td>
<td>c</td>
</tr>
<tr onclick="selecciona(this)">
<td>d</td>
<td>e</td>
<td>f</td>
</tr>
<tr onclick="selecciona(this)">
<td>g</td>
<td>h</td>
<td>i</td>
</tr>
</table>
</body>
</html>
También te ahorrarás los id's y escribir argumentos utilizando el
this. Te ahorras tiempo de ejecución (sobre todo en ordenadores lentos si hay muchas filas) si guardas la fila que acabas de colorear con
anteriorFilaSeleccionada, así no tienes que recorrer todas las filas.
Lo he probado sólo en FF2 y en IE6, tendrás que probarlo en el resto.
Un saludo.