Foros del Web » Programando para Internet » Javascript »

Acceder a datos de un div

Estas en el tema de Acceder a datos de un div en el foro de Javascript en Foros del Web. Eso: tengo el siguiente div: Código: </th> <th width="150"> <a style="cursor:pointer" onmouseover="Tip('&lt;table width=\'240\'&gt;&lt;tr&gt;&lt;td class=\'c\'&gt;Jugador cassius en el ranking 3765&lt;/td&gt;&lt;/tr&gt;&lt;th&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=\'index.php?page=stat&session=9c4db810921a&start=3701\'&gt;Ver en estadísticas&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/th&gt;&lt;/table&gt;', WIDTH, 240,FIX,[mouseX(event)-110,mouseY(event)-40], OFFSETX, ...
  #1 (permalink)  
Antiguo 05/10/2007, 21:41
 
Fecha de Ingreso: octubre-2007
Mensajes: 13
Antigüedad: 16 años, 6 meses
Puntos: 0
Acceder a datos de un div

Eso: tengo el siguiente div:

Código:
 
</th>
<th width="150"> 
<a style="cursor:pointer" onmouseover="Tip('&lt;table width=\'240\'&gt;&lt;tr&gt;&lt;td class=\'c\'&gt;Jugador cassius en el ranking 3765&lt;/td&gt;&lt;/tr&gt;&lt;th&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=\'index.php?page=stat&session=9c4db810921a&start=3701\'&gt;Ver en estadísticas&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/th&gt;&lt;/table&gt;',
       WIDTH, 240,FIX,[mouseX(event)-110,mouseY(event)-40], OFFSETX, -20, OFFSETY, -40, STICKY, true,  DURATION, 1000, BGCOLOR, '#344566', BORDERCOLOR, '#344566')"><span class="normal">cassius</span></a>
</th>
Me han explicado que yo podría corroborar o acceder a las variables de span class, como ser la que está en azul, mediante:

Código:
document.getElementsByTagName('span')
elementoActual.className.substring(0,6)=='normal'
Ahora como podría corroborar una variable que está dentro de a onmouseover tal como la porción que se encuentra en rojo?
  #2 (permalink)  
Antiguo 06/10/2007, 08:39
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: Acceder a datos de un div

Hola esparragos:

No sé si te has parado a releer tu post, pero a parte de sobrar el 90% del código que posteaste (no aportar información) lo que hace es ofuscar todavía más tu intención:

Lo que se debería postear es (a mi entender):
Cita:
¿Cómo puedo corroborar o acceder al atributo class de este elemento SPAN?
Código PHP:
<span class="normal">cassius</span
Me han dicho que puedo hacerlo así:
Código PHP:
document.getElementsByTagName('span')
if( 
elementoActual.className.substring(0,6)=='normal' )   //... 
Pero no me acaba de funcionar.

¿Cómo puedo hacerlo?

Creo que así queda más claro para todo el mundo. Cuanta más justa y directa sea la información, mucho mejor y más rápido serás respondido.


Te doy un ejemplo completo de cómo puedes hacer para hallar el atributo class o className de ese span:
Código PHP:
<span class="normal">cassius</span>
<
button type="button" onclick="f()">Dime el className del primer span que encuentres</button>


<
script type="text/javascript">
<!--

// Alerta el className del primer span que encuentre en el documento
function f() {
    var 
todosLosSpan document.getElementsByTagName("SPAN");
    var 
elPrimerSpan todosLosSpan[0];
    var 
suClassName elPrimerSpan.className;
    
alertsuClassName );
}


// -->
</script> 
Y ahora te digo dónde puede estar tu error:
Tienes que tener en cuenta que document.getElementsByTagName("SPAN") te devuelve una colección de todos los SPAN del documento, así que cada span es un elemento de esa colección (o array) accesible con índices y corrchetes ([0], [1], [2]...). El primer SPAN será [0].

La propiedad className de un elemento te devuelve su class asignado. También podríamos haber hecho:
elPrimerSpan.getAttribute("class"); que no funciona en IE no sé por qué.
elPrimerSpan.getAttributeNode("class").nodeValue;
Que tendrían los dos el mismo efecto.




Lo que no entiendo es tu segunda pregunta:
Cita:
Iniciado por esparragos
Ahora como podría corroborar una variable que está dentro de a onmouseover tal como la porción que se encuentra en rojo?
¿Podrías explicarla un poco más?


Un saludo.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #3 (permalink)  
Antiguo 06/10/2007, 11:50
 
Fecha de Ingreso: octubre-2007
Mensajes: 13
Antigüedad: 16 años, 6 meses
Puntos: 0
Re: Acceder a datos de un div

Ante todo gracias por responder... más aún un sábado a la trade!
Luego te cuento que no soy nuevo en esto: soy nuevísimo. Con esto intento disculparme por haber abrumado el post de caracteres inentendibles.

Lo que yo quiero hacer es una corroboración de de ciertos valores/atributos. Luego te preguntaré como modificerlos...

Para hallar el atributo de class no he tenido problemas. De todas maneras tu explicación fue muy instructiva (x que no se nada).
Mi problema esta en hallar los atributos que, en este caso, están en rojo, contenidos dentro de style y dentro de onmouseover.

Código:
 <a style="cursor:pointer" onmouseover="Jugador cassius en el ranking"</a>
Tambien me gustaría poder evaluar los atributos que están dentro de un <a href="#"></a>. (evaluarlos en el sentido de poder extraerlos y compararlos)

La pregunta es entonces como accedo a todos ellos?
Lo único que medianamente entiendo es que con la función getElementsByTagName puedo acceder a los elementos con etiquieta 'a' y 'span', pero hasta ahí...
  #4 (permalink)  
Antiguo 06/10/2007, 20:13
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: Acceder a datos de un div

Hola otra vez:

Lo más cómodo para acceder a los elementos de una página es darles un id con el atributo del mismo nombre, y desde javascript hacer:
document.getElementById()

También podrías dar atributos name a varios elementos, para poder tener una colección de ellos con document.getElementsByName(), pero funciona a veces de forma anómala en IE, tomando por atributo name los atributos id.



Para acceder a declaraciones dentro del style podemos hacer elemento.style. Éso es un objeto que contiene todos los estilos posibles que podemos dar a un elemento. Es decir: elemento.style.cursor es la definición para el estilo cursor, en tu caso "pointer", elemento.style.fontSize es para la declaración de tamaño, en tu caso una cadena vacía ("").

Para modificar los estilos puedes asignarlos sin ningún problema:
elemento.style.cursor = "help";




En otro plano, para obtener cassius de un atributo de ese tipo, podemos hallar todo el atributo como string, y luego buscar cassius con la ayuda de indexOf(). Recortaremos ese cassius con substring(). Pero todo depende de tus necesidades, si siempre buscas cassius te funcionará, pero si buscas la siguiente palabra después de Jugador, entonces no. Todo depende de lo que quieras tú.

Te voy a postear un ejemplo para extraer la siguiente palabra a "jugador" en un string (que puede ser tu atributo):

Código PHP:
<a id="miEnlace" style="cursor:pointer" alt="Jugador cassius en el ranking"></a>

<
script type="text/javascript">
<!--

window.onload = function() {
    var 
elEnlace document.getElementById("miEnlace");
    var 
atrAlt elEnlace.getAttribute("alt");
    var 
posicionJugador atrAlt.indexOf("Jugador");
    var 
longitudJugador "Jugador ".length;
    
// Primer recorte eliminando "Jugador " y todo lo que esté delante, el string empezará por la palabra que buscamos:
    
atrAlt atrAlt.substringposicionJugador longitudJugadoratrAlt.length );
    
// Segundo recorte, eliminar todo lo que está detrás del espacio después de la palabra que buscamos
    
var posicionEspacio atrAlt.indexOf(" ");
    
atrAlt atrAlt.substring0posicionEspacio );
    var 
palabraBuscada atrAlt;
    
alert"'"+palabraBuscada+"'" );
}

// -->
</script> 
Bueno, te estoy preparando los ejemplos desarrollando las líneas mucho para que no te líes demasiado y podamos ver los efectos de cada línea. Este ejemplo no está preparado si no existe "Jugador " y tampoco si la siguiente palabra no tiene un espacio " " después de ella. Cuando llegues a tener nivel podríamos hacer ésto así de "facil":
Código PHP:
<a id="miEnlace" style="cursor:pointer" alt="Jugador cassius en el ranking"></a>

<
script type="text/javascript">
<!--

window.onload = function() {
    var 
palabraBuscada document.getElementById("miEnlace").getAttribute("alt").match( /.*Jugador ([^ ]+).*/ )[1];
    
alertpalabraBuscada );
}

// -->
</script> 
Pero claro, esto exige tener conocimientos de expresiones regulares, que son lo más complicado (y quizás potente) que puede tener javascript (y muchos otros lenguajes también).




Respecto a cómo acceder a todos los enlaces que tengan por atributo href # podemos recorrer todos los enlaces de la página mirando ese atributo (hay que mirar si acaban en #):
Código PHP:
<a href="http://www.google.es">g</a>
<
a href="#">j</a>
<
a href="#">8</a>
<
a href="http://es.wikipedia.org">w</a>

<
script type="text/javascript">
<!--

window.onload = function() {
    var 
atrs document.getElementsByTagName("A");
    for(var 
i=0atrsL=atrs.lengthi<atrsLi++) {
        if( 
atrs[i].href.charAtatrs[i].href.length-) === "#" ) {
            
// hacemos lo que queramos con ese elemento atrs[i]
            
alert("Soy #!, tengo por contenido "+atrs[i].innerHTML);
        }
    }
}

// -->
</script> 


Bueno, lo siento por toda la chapa que he escrito.


Un saludo.
__________________
- 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 08/10/2007, 08:25
 
Fecha de Ingreso: octubre-2007
Mensajes: 13
Antigüedad: 16 años, 6 meses
Puntos: 0
Re: Acceder a datos de un div

Gracias. Esto ya está muy encaminado.
Todo funciona de maravilla hasta el getAttribute. Luego estoy haciendo algo mal:

Código:
var texto2 = elementoActual.getAttribute('onmouseover');
alert(texto2); // Lo corroboro de forma precaria con el alert y veo que
hasta aquí viene todo perfecto!
var posicionMarcador = texto2.indexOf('ranking '); 
var longitudMarcador = 'ranking'.length;
var texto3 = texto2.substring(posicionMarcador + longitudMarcador,
texto2 );
alert(texto3); // y lo que me da aquí como resultado no es lo que
continúa a ranking (yo busco el número que se encuentra detrás de
esa palabra, eso nunca lo aclaré, perdon) sino todo lo que está
delante de ella, incluyendola.
Algo entendí mal o la estoy pifiando (errando) en el código...¿?
  #6 (permalink)  
Antiguo 08/10/2007, 09:01
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: Acceder a datos de un div

Hola de nuevo esparragos:

Veo que tienes algunas carencias en conceptos... empecemos:

La forma de obtener el atributo, como me has comentado, está perfecta: en texto2 tendremos un String con todo lo que vamos a analizar.

Respecto a la manera de obtener posicionMarcador también está correcta, aunque la posición de "ranking " será en este caso la misma que la de "ranking" (incluso la misma que la de "rank"... etc. indexOf busca la primera incidencia de lo que le pasamos en texto2.

longitudMarcador también está correcto, pero no nos va a servir para lo que queremos. Lo que necesitamos es la longitud de "ranking " (con espacio). Esto es porque queremos hallar la posición de corte (cada - entre caracteres indica la posición según substring en la frase "Hola texto cualquiera ranking 71234"):
Código:
"-H-o-l-a- -t-e-x-t-o- -c-u-a-l-q-u-i-e-r-a- -r-a-n-k-i-n-g- -7-1-2-3-4-"
 | |                                         |               |
 0 1 ...                           posicion de "ranking"     |
                                             posicion de "ranking" + "ranking ".length

Bueno, ahora que ya tenemos la primera posición por donde cortar, tenemos que pensar en la segunda. Ésta viene dada por el final de la frase, es decir, texto2.length (o lo que sería lo mismo en el ejemplo: el último -, el que está después del 4).

Advertir que substring() tiene como parámetros dos números naturales, y tu has puesto un número y un String, lo cual no tiene mucho sentido (y quizás debería dar error).

Bueno, visto ésto creo que ya lo vas a entender mejor:
Código PHP:
/*
var texto2 = elementoActual.getAttribute('onmouseover');
alert(texto2);
*/
// Si está todo perfecto hasta aquí puedo considerar texto2 como cualquier texto terminado en un número (independientemente las cifras que tenga)
var texto2 "Hola texto cualquiera ranking 71234";
// Posición del string "ranking" en el texto
var posicionMarcador texto2.indexOf("ranking"); 
// Ahora necesitamos saber la longitud de "ranking " (con un espacio!)
var longitudMarcador 'ranking '.length;
// Cortaremos texto2 por la posicion (posicionMarcador + longitudMarcador):
var corte = (posicionMarcador longitudMarcador);
// Gracias a substring cogeremos la porción corte1 - final
var final = texto2.length;
var 
numeroBuscado texto2.substringcorte, final);
alert(numeroBuscado); 
Espero que el comentario en cada línea te ayude. Al final lo que conseguimos es este fragmento:
Código:
Hola texto cualquiera ranking 71234 
Es decir, desde corte1 hasta final.



Si tienes más dudas en esto, adelante.

Un saludo.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #7 (permalink)  
Antiguo 09/10/2007, 08:55
 
Fecha de Ingreso: octubre-2007
Mensajes: 13
Antigüedad: 16 años, 6 meses
Puntos: 0
Re: Acceder a datos de un div

Derkenuke, gracias!
Sinceramente has sido muy claro y he podido entenderte de maravilla.
Con los elementos que me has dado ya puedo resolver mi cuestión.


Mentira, tengo otro problema. No quiero abusar de vos, pero resulta que las etiquetas 'a' que busco estan dentro de las etiquetas 'th' cuyo ancho es de 150.
Cómo hago para obtener dicho ancho y poder compararlo para solo buscar en esas etiquetas. Supongasmos que es algo así:

Código:
 
</th>
 <th width="150"> 
 <a id="miEnlace" style="cursor:pointer" alt="Jugador cassius en el ranking"></a>
</th>
Yo creí que podía ser algo así, pero se ve que no tengo la menor idea de nada. Detodas maneras he probado otras variantes y no he podido obtener al ancho de la tabla.

Código:
obj = document.getElementBTagName('th');
ancho = obj.width;
  #8 (permalink)  
Antiguo 09/10/2007, 09:15
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Re: Acceder a datos de un div

Hola esparragos

A ver si esto te funciona:

Código:
enlace = document.getElementById('miEnlace');
ancho = elace.parentNode.style.width;
Saludos,
  #9 (permalink)  
Antiguo 09/10/2007, 11:48
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: Acceder a datos de un div

Cita:
Iniciado por esparragos Ver Mensaje
Código:
obj = document.getElementBTagName('th');
ancho = obj.width;

Otra vez volvemos a confundir objetos con colecciones de objetos. Tu objeto no sería document.getElementsByTagName('th') (eso es una colección con todos los TH), sino document.getElementsByTagName('th')[x], siendo x el número de TH según aparición en el documento empezando a contar desde cero.


La solución era buena en principio, directamente con la propiedad width tendríamos el atributo, pero sería más legible con getAttribute("width") o incluso getAttributeNode("width").nodeValue. Recuerda que ese "150" devuelto estará en forma de String, no puedes operar con él hasta que no sea Number.


La solución de JavierB () es por la que me inclino, si bien style.width sólo devolverá un valor si el atributo style con la propiedad width es definida en el objeto dentro del documento explicitarmente.


Un saludo.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #10 (permalink)  
Antiguo 11/10/2007, 13:40
 
Fecha de Ingreso: octubre-2007
Mensajes: 13
Antigüedad: 16 años, 6 meses
Puntos: 0
Re: Acceder a datos de un div

Alabado seas derkenuke...

Este tema ya está resuelto. Agradezco tus explicaciones!
Lo de los Nodos no le he entendido mucho. Sinceramente no me he puesto a experimentar con ello. Quedará para otro momento... Pero el tema ya lo he resulto gracias a las herramientas que me has dado.
Gracias a los dos!

Un saludo.
  #11 (permalink)  
Antiguo 11/10/2007, 14:28
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: Acceder a datos de un div

No hay de qué esparragos.

Si quieres seguir leyendo sobre los nodos, y algo de DOM (getElement(s)ByXXX()) puedes, simplemente, escribir DOM y javascript en cualquier buscador.

Se pueden hacer cosas realmente cómodas si entiendes bien cómo se estructuran jerárquicamente los elementos de una página y cómo acceder y moverte por ellos con javascript.


Un saludo.
__________________
- 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 15:44.