Tengo un problemilla relacionado con Javascript y la lectura de un XML.
Mi problema es bastante parecido al de este tema:
[URL="http://www.forosdelweb.com/f77/recorrer-xml-314073/"]http://www.forosdelweb.com/f77/recorrer-xml-314073/[/URL]
Pero ese tema es tan antiguo; que he decidido abrir uno nuevo.
Soy un poco cateto en programación, y después de días intentando encontrar la solución, al final he decidido pedir un poco de ayuda.
Si alguien pudiera echarme una mano le estaría muuuuy agradecido
Cuál es mi intención?
Hacer una galería de imágenes dinámica por XML, aunque el XML lo creo yo, a mano.
Mediante un XML se cargan los thumbs de la galería.
Sólo quiero cargar 1 thumb por cada proyecto.
Cuando hago click sobre una imagen, se abre un pop-up lightbox y allí puedo ver todas las imágenes de ese proyecto, con su información en el pie.
He leído por ahí que no se puede hacer esto, de cargar una galería lighbox con sólo un link; pero me ha salido "algo", así que he seguido intentándolo.
Entonces, tengo un XML con esta estructura:
Código XML:
Ver original
<galeria> <proyecto> <ref>referencia1</ref> <info>info del proyecto</info> <icono>/img/icono1.jpg</icono> <imagenes> <imagen>/img/img1.jpg</imagen> <imagen>/img/img2.jpg</imagen> <imagen>/img/img3.jpg</imagen> </imagenes> </proyecto> <proyecto> <ref>referencia2</ref> <info>info del proyecto2</info> <icono>/img/icono2.jpg</icono> <imagenes> <imagen>/img/img4.jpg</imagen> <imagen>/img/img5.jpg</imagen> </imagenes> </proyecto> </galeria>
y tengo un código javascript así; lo pego todo por si os ayuda:
Código Javascript:
Ver original
// Esta función la ejecuto en el body de la página function solicitud(){ createRequest(); var url = "galeria.xml"; request.open ("GET", url, true); request.onreadystatechange = procesado; request.send(null); } function procesado(){ if (request.readyState == 4){ if(request.status == 200){ var datos=request.responseXML; var destino=document.getElementById("contenido"); // es el DIV donde irá cargada la galería var listaULproyectos = document.getElementById("ulProyectos"); //Esta lista está dentro del DIV var divOculto = document.getElementById("divOculto"); var proyecto = datos.getElementsByTagName("proyecto"); var ref = datos.getElementsByTagName("ref"); var info = datos.getElementsByTagName("info"); var icono = datos.getElementsByTagName("icono"); var imagenes = datos.getElementsByTagName("imagenes"); var imagen = datos.getElementsByTagName("imagen"); var listaLiproyectos; var nodeImg; var nodeImg2; var nodeA; var nodeA2; for (i=0; i<proyecto.length; i++){ nodeImg = new Image(); nodeImg.src = icono[i].firstChild.nodeValue; nodeImg.alt = info[i].firstChild.nodeValue; nodeImg.setAttribute ("class", "imas"); nodeA = document.createElement("a"); nodeA.setAttribute("title",info[i].firstChild.nodeValue); nodeA.setAttribute("href", +imagen[i].firstChild.nodeValue); nodeA.setAttribute("rel", "lightbox["+ref[i].firstChild.nodeValue+"]"); nodeA.appendChild(nodeImg); listaLiproyectos = document.createElement("li"); listaLiproyectos.appendChild(nodeA); listaULproyectos.appendChild(listaLiproyectos); } } } }
Hasta aquí, consigo que se me carguen los 2 thumbs en el DIV.
El problema viene ahora:
No sé cómo hacer un bucle y que sólo entre dentro de "imágenes"; que en el proyecto[0] son 3 imágenes, y en el proyecto[1] son 2.
Es aquí donde necesito ayuda :(
Necesito que, de imagen[0] a imagen[2] añadir un "href" a sus respectivas URLs; con sus "imagen[x].firstChild.nodeValue" y que cojan el "ref" de su nodo padre "proyecto[0]" …
De igual modo, necesito que, de la imagen[3] a imagen[4] haga lo mismo, pero tomando la "ref" de su nodo padre "proyecto[1]" para posteriormente construir el enlace para el lightbox, más o menos así:
Código Javascript:
Ver original
nodeA2.setAttribute("href", +imagen[x].firstChild.nodeValue); nodeA2.setAttribute("rel", "lightbox["+ref[i].firstChild.nodeValue+"]"); nodeA2.appendChild(nodeImg); divOculto.appendChild(nodeA2);
Como necesito hacer un "href" a unas imágenes que aun no se ven, las incrusto dentro de un div oculto; algo que no sé si es muy ortodoxo… :S
Bueno, después de todo el rollo, me gustaría agradecer a todos los que hayan prestado atencion y intenten echarme un cable.
Gracias y saludos!!!!