Funzione di ricerca

di il
4 risposte

Funzione di ricerca

Ciao a tutti, sono alle prime armi con il javascript e sto cercando di creare una funzione di ricerca all'interno del mio sito (come se vado su Amazon e cerco un prodotto). Online non sono riuscito a trovare niente, quindi ho fatto un modo tale che gli elementi rimanessero nascosti con visibility=hidden in css, poi andando a cercare nella searchbar e confrontando i risultati, gli elementi che includono la parola cercata spuntano fuori. Peccato che finchè cerco una sola parola funziona tutto, ma se per esempio cerco "Jordan Chicago" e la scarpa si chiama "Jordan One Chicago" non la trova.
Spero possiate aiutarmi, ecco il codice:

function search_animal()
{
let input = document.getElementById('searchbar').value;
input = input.toLowerCase();
let x = document.getElementsByClassName('search');
for (i = 0; i < x.length; i++)
{
if (x.innerHTML.toLowerCase().indexOf(input) == -1) //qua c'era un includes al posto di indexOf, avevo provato a sostituire ma è tutto uguale
{
x.style.display="none";
}
else
{
x.style.display = "block";
}
if (input === "") //ho aggiunto questo if perchè se no eliminando le parole di ricerca gli elementi sottostanti rimanevano in display
{
x.style.display="none";
}
}
}

4 Risposte

  • Re: Funzione di ricerca

    "Jordan Chicago" è <> da "Jordan One Chicago". Dovresti usare le Regular Expression.
    In modo più artigianale puoi splittare la stringa in "Jordan" e "Chicago" e passarle come argomento alla IndexOf()
  • Re: Funzione di ricerca

    Ho capito il problema, devo impostare il codice come se cercassi "Jordan" e "Chicago" separatamente, però essendo alle prime armi con JavaScript non ho ben capito come splittare e passarli come argomenti differenti all'IndexOf.
  • Re: Funzione di ricerca

    Per controllare se le varie parole di una stringa sono incluse in un'altra, ti tornano molto utili le funzioni degli array:
    
    let stringaDaCercare = "Jordan Chicago";
    let scarpa = "Jordan One Chicago";
    
    // Divide la stringa da cercare in un array di parole
    let paroleDaCercare = stringaDaCercare.split(" ");
    
    // Controlla che tutte le parole siano incluse nella stringa "scarpa"
    let found = paroleDaCercare.every( (parola) => scarpa.includes(parola) );
    
    if (found) {
    	console.log("Trovata!");
    }
    
    Oltre a questo, ti conviene prima trasformare entrambe le stringhe in minuscolo, così non si rischia di mancare qualche parola.

    Comunque, ci sono metodi più efficaci (ma anche più complessi) per effettuare una ricerca basandosi sulla somiglianza fra due parole. Cercando ho trovato che sembra andare molto in profondità nell'argomento (anche se purtroppo è in inglese). Probabilmente non è ciò che cerchi in quanto a complessità, ma può essere un'utile risorsa per chi avesse bisogno di questi algoritmi in futuro

    Documentazione:
    - String.prototype.split (MDN inglese)
    - Array.prototype.every (MDN)
    - Array.prototype.includes (MDN)
  • Re: Funzione di ricerca

    andreadev ha scritto:


    Per controllare se le varie parole di una stringa sono incluse in un'altra, ti tornano molto utili le funzioni degli array:
    
    let stringaDaCercare = "Jordan Chicago";
    let scarpa = "Jordan One Chicago";
    
    // Divide la stringa da cercare in un array di parole
    let paroleDaCercare = stringaDaCercare.split(" ");
    
    // Controlla che tutte le parole siano incluse nella stringa "scarpa"
    let found = paroleDaCercare.every( (parola) => scarpa.includes(parola) );
    
    if (found) {
    	console.log("Trovata!");
    }
    
    Oltre a questo, ti conviene prima trasformare entrambe le stringhe in minuscolo, così non si rischia di mancare qualche parola.

    Comunque, ci sono metodi più efficaci (ma anche più complessi) per effettuare una ricerca basandosi sulla somiglianza fra due parole. Cercando ho trovato che sembra andare molto in profondità nell'argomento (anche se purtroppo è in inglese). Probabilmente non è ciò che cerchi in quanto a complessità, ma può essere un'utile risorsa per chi avesse bisogno di questi algoritmi in futuro

    Documentazione:
    - String.prototype.split (MDN inglese)
    - Array.prototype.every (MDN)
    - Array.prototype.includes (MDN)
    Ti ringrazio veramente di cuore, sfortunamente studiando da autodidatta alcune cose mi mancano. Grazie mille ancora per l'aiuto!
Devi accedere o registrarti per scrivere nel forum
4 risposte