salve a tutti,
il mio problema riguarda l'uso di Javascript per fare una ricerca nel file xml e riportare i risultati in una pagina HTML
il tipo di ricerca che devo usare è mediante due menù a tendina dinamici che leggendo i valori "categoria" e "gruppo" dal file XML, generano le varie opzioni di ricerca
una indica la categoria principale e la seconda mette in dettaglio i contenuti
solo che le due select non prendono i dati e di conseguenza non va tutto il resto.
credo che la causa del malfunzionamento sia l'oggetto this.lista che non viene letto dai gestori delle select, ho provato a risolvere ma da solo non ci riesco e sono arrivato alla disperazione, per caso qualcuno sa come risolvere? grazie in anticipo
allego il codice e il link diretto alla pagina cosi potete provarla
http://halo.altervista.org/database.html
Codice:function caricaXML(nomeFile) { var xmlhttp; if (window.XMLHttpRequest) { // IE7+, Firefox, Chrome, Opera, Safari xmlhttp = new XMLHttpRequest(); } else { // IE6, IE5 xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.open("GET", nomeFile, false); xmlhttp.send(); return xmlhttp.responseXML; } /*funzione costruttrice dell'oggetto profilo*/ function Scheda(nom, appar, prof, grup, img){ /*proprietà dell'oggetto*/ this.nome = nom; this.apparizione = appar; this.profilo = prof; this.gruppo = grup; this.immagine = img; } function Archivio(){ this.lista = [];/*array vuoto che conterrà tutti i profili*/ this.inizializza = function(nodo){ /*per ogni nodo con marca "scheda", creo un oggetto scheda, lo inizializzo e lo aggiungo all'array*/ var schede = nodo.getElementsByTagName("scheda"); for(var i = 0; i<schede.length; i++){ var categoria = schede[i].getAttribute("categoria"); var nomi = schede[i].getElementsByTagName("nome"); var nome = nomi[0].firstChild.nodeValue; var apparizioni = schede[i].getElementsByTagName("apparizione"); var apparizione = apparizioni[0].firstChild.nodeValue; var profili = schede[i].getElementsByTagName("profilo"); var profilo = profili[0].firstChild.nodeValue; var immagini = schede[i].getElementsByTagName("immagine"); var immagine = immagini[0].firstChild.nodeValue; var scheda = new Scheda(nome, apparizione, profilo, categoria,immagine, categoria); this.lista.push(scheda); } } /*metodo con cui creo la prima select "categoria"*/ this.creaSelectCategoria = function (nodo) { var categoria = []; for (var i = 0; i<this.lista.length; i++) { categoria[this.lista[i].categoria] = true; } var s = '<option value="null" >Seleziona una Categoria </option>'; for (var i in categoria) { s += '<option value="' + i + '">' + i + '</option>'; } return s; } /*metodo con cui creo la seconda select "gruppo"*/ this.creaSelectGruppo = function (nodo) { var gruppi = []; for (var i = 0; i<this.lista.length; i++) { gruppi[lista[i].gruppo] = true; } var s = '<option value="null" >Seleziona un gruppo</option>'; for (var i in gruppi) { s += '<option value="' + i + '">' + i + '</option>'; } return s; } // crea la lista con gli elementi selezionati precedentemente this.cerca2 = function (categoria,gruppo) { var risultati = []; for (var i = 0; i < this.lista.length; i++) { if (this.lista[i].categoria == categoria && this.lista[i].gruppo == gruppo ) { risultati.push(this.lista[i]); } } return risultati; } this.cerca1 = function(testo){ var risultato = []; var trovato = 0; var i = 0; while(i<this.lista.length && trovato == 0){ if(this.lista[i].nome == testo) { trovato = 1; risultato.push(this.lista[i]); } else i++; } if(trovato == 1) return risultato; else { risultato[0] = null; return risultato; } } this.genera = function(valori){ // genera la lista con gli elementi di xml var s = ""; if(valori[0] == null) s = "Nessun risultato"; else{ for(var i = 0; i<valori.length; i++) s = s + '<li><span class="trovato" onclick="mostra(this);">' + valori[i].nome + " " + '</span><br/><ol class="nascosto"><li class="nopallino2"> <img class="avatar" src='+ valori[i].immagine+'> <br/><br/><p class="titolo4"> Profilo: </p> <p class="bianco">'+ valori[i].profilo +'</p> <p class="titolo4">Apparizione:</p> <p class="bianco">' + valori[i].apparizione +'</p></li></ol></li><br/><br/>'; } return s; } this.nascondi = function(){ var liste = document.getElementsByTagName("ol"); for(var i = 0; i<liste.length; i++){ if(liste[i].className == "nascosto") liste[i].style.display = "none"; } } } // gestore cerca2 function cercaGruppo () { var nodoSelectCategoria = document.getElementById("selectCategoria"); var categoria = nodoSelectCategoria.value; var nodoSelectGruppo = document.getElementById("selectGruppo"); var gruppo = nodoSelectGruppo.value; var schede = contenitore.cerca2(categoria,gruppo); var nodoLista = document.getElementById("lista"); // alert e messaggi d'errore if (schede.length > 0) { var s = ""; for (var i = 0; i < schede.length; i++) { s += schede[i].genera(); } nodoLista.innerHTML = s; } else if (nodoSelectCategoria.value == "null"){ alert("Completa la selezione"); } else if (nodoSelectGruppo.value == "null"){ alert("Completa la selezione"); } else { nodoLista.innerHTML = "NESSUNA SCHEDA TROVATA"; } } function mostra(nome){ var testo = nome.nextSibling.nextSibling; if(testo.style.display == "none") testo.style.display = "block" else testo.style.display = "none" } // funzione che cerca le schede relative all'oggetto cercato digitando il nome function cercaNome(){ var casella = document.getElementsByTagName("input"); var nome; var elenco = document.getElementById("ricerca"); var scheda; nome = casella[0].value; scheda = contenitore.cerca1(nome); elenco.innerHTML = contenitore.genera(scheda); contenitore.nascondi(); } // funzione per mostrare tutte le schede function tutto(){ var elenco = document.getElementById("ricerca"); elenco.innerHTML = contenitore.genera(contenitore.lista); contenitore.nascondi(); } var contenitore = new Archivio(); function inizializza(){ var c1 = document.getElementById("cerca1"); var c2 = document.getElementById("cerca2"); var c3 = document.getElementById("cerca3"); var nodoSelectCategoria = document.getElementById("selectCategoria"); nodoSelectCategoria.innerHTML = contenitore.creaSelectCategoria(); var nodoSelectGruppo = document.getElementById("selectGruppo"); nodoSelectGruppo.innerHTML = contenitore.creaSelectGruppo(); c1.onclick = cercaNome; c2.onclick = cercaGruppo; c3.onclick = tutto; var nodo = caricaXML("elenco.xml"); contenitore.inizializza(nodo); } function crea_gruppo(cat, gruppo) { var gruppi = {}; for (var i = 0; i < lista.length; i++) { if(lista[i].categoria==categoria) { gruppi[lista[i].gruppo] = true; } } var s = '<option value="null" >Seleziona gruppo</option>'; for (var i in gruppi) { s += '<option value="' + i + '">' + i + '</option>'; } document.getElementById("selectGruppo").innerHTML= s; } window.onload = inizializza;

LinkBack URL
About LinkBacks
