Foros del Web » Programando para Internet » Javascript »

Como saber el numero de la fila?

Estas en el tema de Como saber el numero de la fila? en el foro de Javascript en Foros del Web. Hola me gustaria saber, dada una tabla, el numero de la fila en la que me encuentro sin necesidad de tener un campo que me ...
  #1 (permalink)  
Antiguo 26/07/2007, 03:00
 
Fecha de Ingreso: julio-2007
Mensajes: 21
Antigüedad: 16 años, 9 meses
Puntos: 0
Como saber el numero de la fila?

Hola me gustaria saber, dada una tabla, el numero de la fila en la que me encuentro sin necesidad de tener un campo que me lo diga. Es decir calcular de alguna forma el numero de la fila cada vez que quiera saberlo, gracias.
  #2 (permalink)  
Antiguo 26/07/2007, 03:14
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Re: Como saber el numero de la fila?

Hola:

Suponiendo de que te refieres a tablas puedes recorrer el array de filas y comparar el elemento del array con la que pinches (o selecciones...)

<tr onclick="for (i = 0, filas = this.parentNode.getElementsByTagName('tr'), t = filas.length; i < t; i ++) if (filas[i] == this) alert('fila ' + i)" >

Lo puse "a pelo", pero puede tener comportamientos no deseados si hay más de un tBody o si defines tHead o tFoot.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 26/07/2007, 08:27
 
Fecha de Ingreso: julio-2007
Mensajes: 21
Antigüedad: 16 años, 9 meses
Puntos: 0
Re: Como saber el numero de la fila?

Entiendo, sin embargo por lo que quiero hacer eso seria ineficiente.
Pensaba que existia algun modo de hacerlo sin tener que recorrer la tabla comparando.
  #4 (permalink)  
Antiguo 26/07/2007, 17:31
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
Re: Como saber el numero de la fila?

¿Ineficiente? Tampoco es para tanto ¿no? Bueno, si es una tabla interminable podrías recorrerla al principio poco a poco (controlando con setInterval) e ir asignando a cada celda un atributo donde guardes el número de fila. Así será mas "eficiente" (no, pero será más relajado).

No se me ocurre ninguna manera de saber el número de fila sin utilizar un bucle para saber el nodo en el que nos encontramos.

He intentado una cosa que se basa en encontrar el contenido de la celda en el innerHTML de la tabla. Entonces coger el segmento de código antes de la celda, y contar el número de tr que aparecen. El problema es que si hay dos celdas con el mismo contenido, hay que hacer más comprobaciones (se puede hacer...):

Código PHP:
<table border="1">
    <
tbody>
        <
tr>
            <
td onclick="alert( queFilaSoy(this) );">lorem</td>
            <
td onclick="alert( queFilaSoy(this) );">ipsum</td>
            <
td onclick="alert( queFilaSoy(this) );">dolor</td>
            <
td onclick="alert( queFilaSoy(this) );">sit</td>
        </
tr>
        <
tr>
            <
td onclick="alert( queFilaSoy(this) );">amet</td>
            <
td onclick="alert( queFilaSoy(this) );">consteteur</td>
            <
td onclick="alert( queFilaSoy(this) );">hola</td>
            <
td onclick="alert( queFilaSoy(this) );">que</td>
        </
tr>
        <
tr>
            <
td onclick="alert( queFilaSoy(this) );">tal</td>
            <
td onclick="alert( queFilaSoy(this) );">mañana</td>
            <
td onclick="alert( queFilaSoy(this) );">como</td>
            <
td onclick="alert( queFilaSoy(this) );">muy</td>
        </
tr>
        <
tr>
            <
td onclick="alert( queFilaSoy(this) );">pronto</td>
            <
td onclick="alert( queFilaSoy(this) );">el</td>
            <
td onclick="alert( queFilaSoy(this) );">cardillo</td>
            <
td onclick="alert( queFilaSoy(this) );">que</td>
        </
tr>
    </
tbody>
</
table>





<
script type="text/javascript">


function 
queFilaSoycelda ) {
    
// innerHTML de la tabla
    
tablaInnerHTML celda.parentNode.parentNode.innerHTML
    
// parte de innerHTML de la tabla antes de nuestra celda
    
antesInnerHTML tablaInnerHTML.substring(0tablaInnerHTML.indexOf(">"+celda.innerHTML+"</"));
    
// partimos ese string por <tr>, así tendremos la cantidad de partes (cantidad de "<tr>" que hay) 
    
soyFila antesInnerHTML.split(/<tr>/i).length;
    
// devolvemos soyFila menos una unidad porque queremos que la primera fila sea 0
    
return soyFila-1;
}

</script> 

Como ves funciona, pero si se repite el contenido (como en la última celda) habría que buscar más inteligentemente . Y eso nos llevaría más código y más complejidad... De rendimiento con una tabla de 10000 filas no sé cómo andaría, pero yo no se si te merece la pena.


¿De qué problema hablamos?
__________________
- 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 06:57.