Foros del Web » Programando para Internet » Javascript »

moverse por tabla con DOM

Estas en el tema de moverse por tabla con DOM en el foro de Javascript en Foros del Web. Bueno, es simplemente asi: Tengo eventos onclick en todas las celdas de una tabla. Mediante una funcion quiero acceder a todas las celdas a su ...
  #1 (permalink)  
Antiguo 16/03/2004, 15:00
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
moverse por tabla con DOM

Bueno, es simplemente asi:

Tengo eventos onclick en todas las celdas de una tabla. Mediante una funcion quiero acceder a todas las celdas a su alrededor y modificarles el borde (no problem lo del borde :·)

Bueno, para acceder a las celdas de la derecha y de la izquierda de la celda actual es facil (this es la celda en la que se hizo click):

Código PHP:
this.previousSibling 
Y para la de la derecha con next, vale eso es facil (hasta tengo hecha la comprobacion para ver si es la primera/ultima celda la pulsada para que no haya errores ).

Bueno el problema viene cuando quiero acceder a, por ejemplo, la celda superior. No se me ocurre nada de nada, seguro que existe una solucion que no sea muy engorrosa, ¿verdad?


__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.

Última edición por derkenuke; 16/03/2004 a las 15:31
  #2 (permalink)  
Antiguo 16/03/2004, 17:36
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 1 mes
Puntos: 1284
Hola derkenuke:

No te vale la colección de celdas de la tabla :

con esto:
document.getElementById("tabla").getElementsByTagN ame("td")
consigues el array de las celdas dela tabla con id=tabla...

Para obtener el nodo padre tienes parentNode, pero sería el tag "tr", y el inmediato superior sería el tag "Tbody"

Pero tienes que tener mucho cuidado con esta forma de buscar elementos ya que en ocasiones un espacio en blanco se considera un nodo... tendrías que consultar los nodeName y controlar que sean nodos "TD"... al menos los parenNode tienen que ser etiquetas normales.

Saludos
  #3 (permalink)  
Antiguo 17/03/2004, 01:14
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Si pero con eso ¿que puedo hacer?. He pensado en contar en el <tr> que estoy (seria un blucle: ir probando desde el primero hasta el que coincida con el tr actual) y luego contar el td actual de la misma manera. Seleccionaria el trActual-1 y la misma celda (la tabla es cuadrada). ¿Funcionara?

De todas maneras tendre cuidado con los nodosde texto, de momento no me han dadoproblemas.

Muchas gracias caricatos!
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #4 (permalink)  
Antiguo 17/03/2004, 08:55
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Bueno ya lo he solucionado, modo chapuza, pero funciona. Le he puesto a cada celda propiedades de fila y columna (las primeras son 0, como indices en un array).

De esta manera cuando hago click en una celda, por ejemplo para activar el borde de abajo de la celda superior:

Código PHP:
if(this.fila>0)    //si no es el <tr> de arriba del todo. Va asi: this.<tr>.<tbody>.<tr anterior>.<td mismo>.style..
    
this.parentNode.parentNode.childNodes[this.fila-1].childNodes[this.columna].style.borderBottom="solid 1px "+col
Funciona, no es lo mas elegante pero... Si alguien conoce mejor manera de hacerlo que avise por favor.

__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #5 (permalink)  
Antiguo 17/03/2004, 09:18
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 1 mes
Puntos: 1284
Hola otra vez:

Me alegro que te funcione, pero tengo que admitir que no llegué a enterarme de tu intención (Tampoco tengo mucho tiempo últimamente)...

Pero me parece que es una solución válida... Usar un atributo en una etiqueta, que sea representativo es ni más ni menos lo que yo haría...

Sé que has visto el inspector DOM... y para interactuar entre marcos, he añadido nuevos atributos a los elementos...

Cita:
Si alguien conoce mejor manera de hacerlo que avise por favor
Saludos
  #6 (permalink)  
Antiguo 17/03/2004, 09:20
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
En efecto, lo he leido . Me lo repasare para entender eso.

Muchas gracias por tu tiempo.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:47.