mardi 11 mai 2021

Javascript search() string with different letters

I have a website, something like an atlas of herbs, and I have a problem. I have a search bar and using javascript search() method I look which texts contain the entered keyword. Now, it works perfectly, but since the texts are in slovak, there are more letters than in English alphabet like: ľ,š,č,ť,ž,ý,á,í,é and many more. The search function works only with English alphabet. It does not throw an error but pretends that such word does not exist. How can I change it? By the way the texts are stored as strings in objects.

var vyhladavac = document.getElementById("vyhladavac");
var kluc; //slovo, ktore je hladane
var vysledky = [];
var cast_textu_kde_hladame;

function zobraz_vysledky(){
    zmaz();
    for (v = 0; v < vysledky.length; v++){
        for (i = 0; i < zoznam.length; i++){
            if (zoznam[i][0] == vysledky[v]){
                switch(zoznam[i][1]){
                    case "b":
                        pridajEl("bylina");
                        break;
                    case "k":
                        pridajEl("ker");
                        break;
                    case "s":
                        pridajEl("strom");
                        break;
                    case "ks":
                        pridajEl("kstrom");
                        break;
                    case "pk":
                        pridajEl("poloker");
                        break;
                    case "o":
                        pridajEl("ostatne");
                }
            }
        }
    }
}

function hladaj(){                   //funkcia hladaj prejde vsetky byliny v registri a vsetky texty ku kazdej byline. Ak najde tak vypluje nazov byliny
    for(i = 0; i < register.length; i++){
        if(register[i].zaklad.nazov.search(kluc) != -1  || register[i].zaklad.latinsky.search(kluc) != -1  || register[i].opis.popis.search(kluc) != -1  || register[i].opis.vyskyt.search(kluc) != -1  || register[i].zber.text.search(kluc) != -1  || register[i].liecba.liecitelstvo.search(kluc) != -1  || register[i].liecba.fandly.search(kluc) != -1  || register[i].recept.nazov.search(kluc) != -1 || register[i].recept.priprava.search(kluc) != -1  || register[i].upozornenie.text.search(kluc) != -1){
            vysledky.push(register[i].zaklad.nazov);
        }
        for(a = 0; a < register[i].zber.mesiace; a++){              //for cyklus tu je preto, ze metodu search mozem pouzit len na string, nie na pole => musim prezerat kazdy string v poli
            if(register[i].zber.mesiace[a].search(kluc) != -1){
                vysledky.push(register[i].zaklad.nazov);
            }
        }
        for(b = 0; b < register[i].zber.casti; b++){
            if(register[i].zber.casti[b].search(kluc) != -1){
                vysledky.push(register[i].zaklad.nazov);
            }
        }
        for(c = 0; c < register[i].recept.ingrediencie; c++){
            if(register[i].recept.ingrediencie[c].search(kluc) != -1){
                vysledky.push(register[i].zaklad.nazov);
            }
        }
    }
    console.log(vysledky);
    zobraz_vysledky();
}

function spracuj(event){             //funkcia spracuj caka kedy uzivatel stlaci enter, nasledne spusti funckiu hladaj
    if(event.key == "Enter"){
        kluc = new RegExp(vyhladavac.value, "i");       //RegExp je funkcia, ktora zmeni string na regular expression. Icko znamena, ze nezalezi ci je prve pismeno velke alebo male
        hladaj();
    }
}

vyhladavac.addEventListener("keydown", spracuj);

Function hladaj searches all texts for each herb and zobraz_vysledky appends names of herbs with keyword to a HTML list.

Aucun commentaire:

Enregistrer un commentaire