Foros del Web » Programando para Internet » Javascript »

DOM para Class

Estas en el tema de DOM para Class en el foro de Javascript en Foros del Web. Hola, foreros! ¿Como puedo seleccionar con el DOM a los elementos de una misma clase? Para seleccionar los elementos por id lo hago de este ...
  #1 (permalink)  
Antiguo 29/09/2008, 22:29
Avatar de salbatore  
Fecha de Ingreso: abril-2007
Ubicación: Springfield
Mensajes: 1.567
Antigüedad: 17 años
Puntos: 19
DOM para Class

Hola, foreros!

¿Como puedo seleccionar con el DOM a los elementos de una misma clase?

Para seleccionar los elementos por id lo hago de este modo:

Código PHP:
var objeto document.getElementById('mi_id'); 
Como lo hago para este caso:
Código PHP:
<div class='class_para_texto'>
</
div>
<
script>
var 
objeto document.getElementById('class_para_texto');
</script> 
  #2 (permalink)  
Antiguo 29/09/2008, 22:42
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: DOM para Class

Hola:

Existe getElementsByClassName(), pero no estoy seguro de que lo soporten todos los navegadores.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 29/09/2008, 23:26
Avatar de salbatore  
Fecha de Ingreso: abril-2007
Ubicación: Springfield
Mensajes: 1.567
Antigüedad: 17 años
Puntos: 19
Respuesta: DOM para Class

Hola,

Muchas gracias... lo he probado y no va en todos los navegadores... asi que tendre que hacerlo con id... jeje...

Muchas gracias!
  #4 (permalink)  
Antiguo 30/09/2008, 00: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
Respuesta: DOM para Class

Hola:

Para seleccionar grupos tienes también getElementsByTagName()... si esa clase la aplicas a una clase concreta, puedes crear la colección consultando su className.

Código:
function coleccionPorClases(cual) {
 clases = [];
 for (i = 0, todos = document.body.getElementsByTagName("*"), total = todos.length; i < total; i ++)
  if (todos[i].className == cual) clases.push(todos[i]);
 return clases;
}
Fíjate que se puede usar el asterisco como nombre del tag.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #5 (permalink)  
Antiguo 30/09/2008, 09:47
Avatar de buzu  
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 17 años, 6 meses
Puntos: 122
Respuesta: DOM para Class

Hay funciones getElementByClass que han desarrollado algunos javascripter. Solo busca en google y encontraras un monton.
__________________
twitter: @imbuzu
  #6 (permalink)  
Antiguo 30/09/2008, 09:48
Avatar de buzu  
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 17 años, 6 meses
Puntos: 122
Respuesta: DOM para Class

http://www.google.com/search?hl=en&s...yclass&spell=1
__________________
twitter: @imbuzu
  #7 (permalink)  
Antiguo 30/09/2008, 10:37
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: DOM para Class

Cita:
Iniciado por buzu Ver Mensaje
Hay funciones getElementByClass que han desarrollado algunos javascripter. Solo busca en google y encontraras un monton.
¡Je, je!... aunque casi todos los que vi están pero desarrollados...

¿Qué opinas...?

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #8 (permalink)  
Antiguo 30/09/2008, 16:28
Avatar de salbatore  
Fecha de Ingreso: abril-2007
Ubicación: Springfield
Mensajes: 1.567
Antigüedad: 17 años
Puntos: 19
Respuesta: DOM para Class

Hola de nuevo!...

Ok!, ahora las miro, jeje...
  #9 (permalink)  
Antiguo 30/09/2008, 16:38
Avatar de buzu  
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 17 años, 6 meses
Puntos: 122
Respuesta: DOM para Class

No entiendo caricatos... a que te refieres?
__________________
twitter: @imbuzu
  #10 (permalink)  
Antiguo 30/09/2008, 17:06
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: DOM para Class

Cita:
Iniciado por buzu Ver Mensaje
No entiendo caricatos... a que te refieres?
¡Je, je! eso de los dedos torpes...

están pero desarrollados... => están peor desarrollados...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #11 (permalink)  
Antiguo 01/10/2008, 12:20
Avatar de buzu  
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 17 años, 6 meses
Puntos: 122
Respuesta: DOM para Class

ahhhh... ahora si. Y la verdad es que no habia visto tu respuesta en la que das la funcion, de haver sido asi, lo habria deducido... No se por que razon no la vi. Solo agregar que yo usaria una expresion en lugar de una igualdad considerando que es posible agregar mas de una clase a un solo elemento, ademas de que usaria la forma total[i] como segundo parametro del loop. Esto evita tener que estar calculando la longitud del array cada vuelta que da el loop.

Saludos, y si, la mayoria están peor desarrolladas.
__________________
twitter: @imbuzu
  #12 (permalink)  
Antiguo 01/10/2008, 17:04
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: DOM para Class

Hola:

Interesante respuesta, pero la solución es hacia la pregunta DOM para class (no es plural), así que la igualdad creo que es la respuesta idónea, pero sin duda es un matiz a considerar.
Sobre el bucle, en la zona de inicialización de la sintaxis de la instrucción for (la primera) es donde se hace el cálculo del total...

for (i = 0, todos = document.body.getElementsByTagName("*"), total = todos.length; i < total; i ++)

i = 0 -> se inicializa i;
todos = document.body.getElementsByTagName("*") -> todos = alias de todos los tags
total = todos.length -> se crea la variable total para evitar calcularla en cada paso del bucle.

De todos modos el problema del cálculo está cuando realmente se realiza un cálculo, cosa más que debatida en php con los bucles sobre arrays, usando en la condición de salida el cálculo de la longitud del array...
for ($i = 0; $i < count($datos); $i ++)... con esa sintaxis se recalcula la longitud del array en cada paso del bucle...
Lo que pasa con javascript y los bucles con arrays es que length es una propiedad de los arrays (no se llama a ningún método para obtener ese valor...)

Algo similar es recorrer cadenas en lenguajes como pascal y modula-2, donde las cadenas tienen una longitud máxima de 255 caracteres, y viene dado por el primero de esos caracteres, o sea que el máximo valor se obtiene del primero (una curiosidad de los distintos lenguajes...)

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #13 (permalink)  
Antiguo 01/10/2008, 18:13
Avatar de buzu  
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 17 años, 6 meses
Puntos: 122
Respuesta: DOM para Class

Si, una curiosidad. Creo que no lei bien tu codigo.. las prisas. DE cualquier modo a mi me gusta usar la forma corta. Igual es una tonteria, pero encuentro todos[i] mas fácil de escribir que i<todos

Y luego me pregunto, por que no reduces esto:

todos = document.body.getElementsByTagName("*"), total = todos.length;

a esto:

total = document.body.getElementsByTagName('*').length
__________________
twitter: @imbuzu
  #14 (permalink)  
Antiguo 02/10/2008, 00:50
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: DOM para Class

Cita:
Iniciado por buzu Ver Mensaje
...
Y luego me pregunto, por que no reduces esto:

todos = document.body.getElementsByTagName("*"), total = todos.length;

a esto:

total = document.body.getElementsByTagName('*').length
La respuesta está en el cuerpo del bucle...

Código:
if (todos[i].className == cual) clases.push(todos[i]);
sin esa instrucción intermedia, el código sería:

Código:
if (document.body.getElementsByTagName("*")[i].className == cual)
 clases.push(document.body.getElementsByTagName("*")[i]);
Una de las frases que más se escuchan en las clases de informática, en los distintos cursos que he estado (sobre todo de programación) es "¡Divide y vencerás!"... creo que con la definición de alias como este caso, se gana en legibilidad.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #15 (permalink)  
Antiguo 02/10/2008, 11:49
Avatar de buzu  
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 17 años, 6 meses
Puntos: 122
Respuesta: DOM para Class

pues puede ser... De cualquier modo tu script es la respuesta que el chico anda buscando. En hora buena caricatos!
__________________
twitter: @imbuzu
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 08:06.