Мне нужно преобразовать слово или несколько слов из раскладки «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) })
Этот код работает, как и ожидалось, но я хочу знать, есть линеуклюжее решение для этого?