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;