Foros del Web » Programando para Internet » Javascript »

pintar muchos td

Estas en el tema de pintar muchos td en el foro de Javascript en Foros del Web. tengo una tabla con muchas filas y muchas columnas y tengo un grupo de 10 td que tienen el mismo id, de que manera podria ...
  #1 (permalink)  
Antiguo 17/02/2004, 20:46
Avatar de dieguicho  
Fecha de Ingreso: noviembre-2001
Ubicación: Buenos Aires
Mensajes: 1.190
Antigüedad: 22 años, 5 meses
Puntos: 1
pintar muchos td

tengo una tabla con muchas filas y muchas columnas
y tengo un grupo de 10 td que tienen el mismo id, de que manera podria colorear todos los td que tengan el id=1 ?

desde ya muchas gracias y
__________________
On error no hago nada porque deje de fumar...
  #2 (permalink)  
Antiguo 18/02/2004, 03:17
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Hola, dieguicho.

No se si habrá otra forma, pero puedes poner un id a la tabla (id='tabla') y usar este código:
Código PHP:
    elem=document.getElementById('tabla');
    
celdas=elem.getElementsByTagName('td');
    for (
i=0;i<celdas.length;i++)
        if (
celdas[i].id=='algo')
            
celdas[i].style.backgroundColor='green'
Saludos,
  #3 (permalink)  
Antiguo 18/02/2004, 08:38
Avatar de dieguicho  
Fecha de Ingreso: noviembre-2001
Ubicación: Buenos Aires
Mensajes: 1.190
Antigüedad: 22 años, 5 meses
Puntos: 1
excelente! si funciona

ahora bien, ultima preguntita complementaria.

hay alguna manera de saber el id de un objeto pongo un pseudo ejemplo para que me entiendas mejor.

<input type="button" id="1" value="boton" onClick="Javascript:algunafuncion(esteobjeto.id)">

se entiende no?

gracias!!
__________________
On error no hago nada porque deje de fumar...

Última edición por dieguicho; 18/02/2004 a las 09:10
  #4 (permalink)  
Antiguo 18/02/2004, 10:35
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola dieguicho:

Me parece que haces mal poniendo el mismo id en distintos elementos, ya que no es recomendable y puede generar errores...
Puedes crearte cualquier atributo y dejar que el id tenga su función propia.
Así como usas id puedes usar identificador, y para la referencia puedes usar this.id (o this.identificador)
alert(this.id)...

Otra forma para leer atributos es getAttribute, o attribute["id"] (attribute es la colección de atributos)... y para dar valores a atributos puedes usar setAttribute(elNombre, elValor).

Por último, el array de atributos (attribute) se trata de objetos con dos elementos name y value, y puedes obtener todos los nombres y valores de los atributos de cualquier etiqueta recorriéndolos con un bucle ya que attributes tiene su propiedad length, y se pueden referenciar por su índice numérico.

Saludos
  #5 (permalink)  
Antiguo 18/02/2004, 11:31
Avatar de dieguicho  
Fecha de Ingreso: noviembre-2001
Ubicación: Buenos Aires
Mensajes: 1.190
Antigüedad: 22 años, 5 meses
Puntos: 1
con id me funcionó pero si decis que puede dar errores que me recomendas?

te cuento que quiero hacer
es una tabla de 10 columnas por 10 filas

quiero que al clickear determinada celda se coloreen varias otras mas, todas las que corresponden a un mismo "cliente" por eso se me ocurrio ponerle a todas las celdas que corresponden al mismo cliente el mismo id

veo que sugeris que en vez de hacer td id="1" haga td identificador="1" y no tendre problemas?

muchas gracias, con esto aprendo barbaridad
__________________
On error no hago nada porque deje de fumar...
  #6 (permalink)  
Antiguo 18/02/2004, 14:02
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola otra vez:

Lo de los errores tal vez no lo note nadie, pero supongo que si intentas validar tu código con el validador de w3.org (o cualquier otro) te lo señalaría (podrías probar...¿?)

Todas las celdas (y todas las etiquetas) en los navegadores modernos (*) se tratan como objetos... y como tales, eres libre de agregarle el atributo que quieras (siempre que sea sintácticamente aceptable y no se repitan... )... ... particularmente me despreocupo de los navegadores muy antiguos porque son muy pocos los que pueden seguir usándolos.

Si tienes problemas para adaptarlo no dudes en volver a consultar... además, si con el id te iba bien, eres libre de seguir usándolo (aunque te lo reprochen)

Saludetes
  #7 (permalink)  
Antiguo 18/02/2004, 15:44
Avatar de dieguicho  
Fecha de Ingreso: noviembre-2001
Ubicación: Buenos Aires
Mensajes: 1.190
Antigüedad: 22 años, 5 meses
Puntos: 1
ya que lo hacemos lo hacemos lo mejor posible no?

probe poniendole miatributo="1" a todas las celdas que quiero colorear y tambien funciona perfecto igual que si le dejaba id="1"

probare con el validador a ver que me dice, de todos modos tampoco me preocupo por los navegadores viejos, porque es para una red interna y todos los navegadores son iguales ;)

muchas gracias y hasta la proxima pregunta!
__________________
On error no hago nada porque deje de fumar...
  #8 (permalink)  
Antiguo 18/02/2004, 16:21
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Cita:
ya que lo hacemos lo hacemos lo mejor posible no?
Para mi forma de pensar es lo mejor que se puede hacer... Espero no haberte orientado mal

Tal vez el validador encuentre un fallo en el atributo inventado... (espero que no)

Saludos
  #9 (permalink)  
Antiguo 19/02/2004, 00:04
Avatar de dieguicho  
Fecha de Ingreso: noviembre-2001
Ubicación: Buenos Aires
Mensajes: 1.190
Antigüedad: 22 años, 5 meses
Puntos: 1
me pintó otro problema, crei que podria hacerlo yo solo pero fracasé jejej.

como te habia comentado son como varios "grupos" de td con el mismo identificador.

de que manera podria hacer que al clickear un td pinte todo los de su grupo (esto ya esta) pero a la vez, si ya hay algun grupo pintado volverlo a su estado anterior?

ya incursioné en aplicarle estilos en vez de pintarle el fondo

if (celdas[i].className == "marcado")
celdas[i].className = "regular";

esto lo puse antes de...

if (celdas[i].identificador==variable)
celdas[i].className = "marcado";

pero me da error de que celdas[...] no existe.

salu2!!
__________________
On error no hago nada porque deje de fumar...
  #10 (permalink)  
Antiguo 19/02/2004, 14:39
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola otra vez:

Vas bien encaminado...

function marcar(actual) {
var celdas=document.getElementById('tabla').getElement sByTagName('td');
for (i=0;i<celdas.length;i++) celdas[i].className = "regular";
for (i=0;i<celdas.length;i++)
if (celdas[i].identificador == actual)
celdas[i].className = "marcado";
}

La idea es hacer un bucle for para la limpieza, y luego otro bucle para marcar.

El error es posible que sea de otra cosa, tal vez haya alguna celda sin "identificador"... Si tienes algún enlace para verlo, dilo.

Saludos
  #11 (permalink)  
Antiguo 19/02/2004, 17:57
Avatar de dieguicho  
Fecha de Ingreso: noviembre-2001
Ubicación: Buenos Aires
Mensajes: 1.190
Antigüedad: 22 años, 5 meses
Puntos: 1
aaahjaaaa esto funciona esplendidamente pero el problema es que cuando hace el bucle para limpiar limpia toooda la tabla, la idea seria que limpie solo los td que tienen aplicado el primer estilo

creo que seria como poner una condicion mas a getElementsByTagName('td');

osea todos los td que ademas tienen aplicado el estilo "marcado"

ya casiiiii mil gracias caricatos..
__________________
On error no hago nada porque deje de fumar...
  #12 (permalink)  
Antiguo 21/02/2004, 16:28
Avatar de dieguicho  
Fecha de Ingreso: noviembre-2001
Ubicación: Buenos Aires
Mensajes: 1.190
Antigüedad: 22 años, 5 meses
Puntos: 1
hola a todos, logre hacer lo que queria.... muy feliz, pero tengo un problemita pequeño.
revisen esta url para poder ver de que les hablo
www.fiestasinolvidables.com/reservas.htm

ahi veran unos cuadros y podran seleccionarlos. el tema es que cuando hay una "reserva" en el medio, deberia marcarse como dayEnd el ultimo dia "libre" y no sucede, sino que lo pasa por alto y si bien no marca los demas dias no logro hacer que se setee dayEnd

cualquier duda estoy x aca, gratzie!!!
__________________
On error no hago nada porque deje de fumar...

Última edición por dieguicho; 21/02/2004 a las 16:30
  #13 (permalink)  
Antiguo 21/02/2004, 16:44
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola dieguicho:

Creo que cuando encuentras el "ocupado" antes de hacer el return, tendrías que actualizar la variable dayEnd y llamar a la función writeDays()...

Es que al salir del bucle con return también sales de la función, y lo que quedara pendiente no se hace.

Espero que sea eso lo que necesitas.

Saludetes
  #14 (permalink)  
Antiguo 21/02/2004, 17:05
Avatar de dieguicho  
Fecha de Ingreso: noviembre-2001
Ubicación: Buenos Aires
Mensajes: 1.190
Antigüedad: 22 años, 5 meses
Puntos: 1
excelente. todo esta saliendo muuuy bien, era eso nomas.
si se les ocurre algo para cambiarlo, diganme, aunque funciona bien... voy a festejar ahora jejee gracias a todos!!
__________________
On error no hago nada porque deje de fumar...
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 21:43.