jquerytypeahead: работа с несоответствующими словами - PullRequest
0 голосов
/ 09 января 2020

Я использую этот jquery плагин typeahead: http://www.runningcoder.org/jquerytypeahead/

У меня очень простой код:

var street=['street of north','street of south','street of east'];

            $.typeahead({
            input: "#input",
            order: "asc",
            minLength: 1,
            source: {
                data: street
            }

        });

Когда я набираю «север», предложение это "улица севера".

Но мне хотелось бы, чтобы при вводе слова "северная улица", а не только для точной строки, использовалось предложение "улица севера".

Вот демонстрационная программа для кодов: https://codepen.io/Antoine_77/pen/GRgxpEL

1 Ответ

0 голосов
/ 09 января 2020

Я нашел это. Кажется работает:

        $.typeahead({
            input: "#input",
            order: "asc",
            minLength: 1,
            accent: true,searchOnFocus: true, 

            source: {
                data: gares
            },
            cancelButton: false,
            filter: function (item, displayKey) {
            var queryArray = this.query.split(' ');

            for (var i = 0, ii = queryArray.length; i < ii; ++i) {
            if (displayKey.toLowerCase().includes(queryArray[i].toLowerCase())) {

            }
            else {return false;}
            }
            return true;
            }

            });

ОБНОВЛЕНИЕ: другое решение:

        $.typeahead({
        input: ".js-typeahead",
        order: "asc",
        template: "{{display}}",
        correlativeTemplate: true,
        minLength: 1,
        source: {
            data: street
        }

    });

ОБНОВЛЕНИЕ: работает с акцентом:

filter: function (item, displayKey) { var queryArray = this.query.split(' '); var aa=displayKey.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, ""); for (var i = 0, ii = queryArray.length; i < ii; ++i) { var bb= queryArray[i].toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, ""); if (!aa.includes(bb)) {return false} } return true; }
...