Как преобразовать слово из одного макета в другой, используя js в DataTable поиска? - PullRequest
0 голосов
/ 25 декабря 2018

Мне нужно преобразовать слово или несколько слов из раскладки «ru» в «eng» (и наоборот), чтобы упростить поиск в DataTable в случае, когда пользователь начинает вводить неправильную раскладку клавиатуры.

Iнаписал для этого немного неуклюжую функцию:

var convertedLayout = function(text) {
    var result = '';
    var enLayout = 'qwertyuiop[]asdfghjkl;\'zxcvbnm,./';
    var ruLayout = 'йцукенгшщзхъфывапролджэячсмитьбю.';

    for (i = 0; i < text.length; i++) {
        var indexEn = enLayout.indexOf(text[i].toLowerCase());
        var indexRu = ruLayout.indexOf(text[i].toLowerCase());
        if (indexEn >= 0) {
            result += ruLayout[indexEn]
        } else if (indexRu >= 0) {
            result += enLayout[indexRu]
        } else {
            result += text[i]
        }
    }
    return result
};

и затем использовал ее в DataTable следующим образом:

var table = $(tableSelector).DataTable(options);

var search = debounce(function ( val ) {
  val = $.trim(val);
  var regexp = '(' + val + '|' + convertedLayout(val) + ')';
  table.search(regexp, true, false).draw();
}, 300);

$(dataTableFilterSelector)
  .find('input')
  .off('input keyup keydown')
  .on('input', function () { search(this.value) }) 

Этот код работает, как и ожидалось, но я хочу знать, есть линеуклюжее решение для этого?

...