为什么Select2框架找不到一些unicode字符?
Why Select2 framework can not find some unicode character?
我在 mu 网站中使用 select2.js。我网站的语言是波斯语。我用此选项填充 select 元素
<select name="TrainDeparture" class="full-width select2" id="TrainDeparture">
<option value="165">كرج</option>
</select>
js:
(function ($) {
"use strict";
$.fn.select2.locales['fa'] = {
formatMatches: function (matches) { return matches + " نتیجه موجود است، کلیدهای جهت بالا و پایین را برای گشتن استفاده کنید."; },
formatNoMatches: function () { return "نتیجهای یافت نشد."; },
formatInputTooShort: function (input, min) { var n = min - input.length; return "لطفاً " + n + " نویسه بیشتر وارد نمایید"; },
formatInputTooLong: function (input, max) { var n = input.length - max; return "لطفاً " + n + " نویسه را حذف کنید."; },
formatSelectionTooBig: function (limit) { return "شما فقط میتوانید " + limit + " مورد را انتخاب کنید"; },
formatLoadMore: function (pageNumber) { return "در حال بارگیری موارد بیشتر…"; },
formatSearching: function () { return "در حال جستجو…"; }
};
$.extend($.fn.select2.defaults, $.fn.select2.locales['fa']);
})(jQuery);
$('.select2').select2();
当我在 select2 的搜索框中输入
ك
字符它显示消息没有找到结果但这是错误的。
I add arabic language to my keyboard and retest . In this case select2
found words currently . Now How can i fix this?
我遇到了类似的问题。我创建了一个自定义匹配器。
function customMatcher (params, data){
// Always return the object if there is nothing to compare
if ($.trim(params.term) === '') {
return data;
}
if (data.children && data.children.length > 0) {
// Clone the data object if there are children
// This is required as we modify the object to remove any non-matches
var match = $.extend(true, {}, data);
// Check each child of the option
for (var c = data.children.length - 1; c >= 0; c--) {
var child = data.children[c];
var matches = customMatcher(params, child);
// console.log(matches);
// If there wasn't a match, remove the object in the array
if (matches == null) {
match.children.splice(c, 1);
}
}
// If any children matched, return the new object
if (match.children.length > 0) {
return match;
}
// If there were no matching children, check just the plain object
return customMatcher(params, match);
}
var original = data.text.normalize('NFD').replace(/[\u0300-\u036f]/g, "").toUpperCase();
var term = params.term.normalize('NFD').replace(/[\u0300-\u036f]/g, "").toUpperCase();
// Check if the text contains the term
if (original.indexOf(term) > -1) {
return data;
}
// If it doesn't contain the term, don't return anything
return null;
}
$('select').select2({
matcher: customMatcher
});
与原版的主要区别在于如何删除变音符号。
var original = data.text.normalize('NFD').replace(/[\u0300-\u036f]/g, "").toUpperCase();
var term = params.term.normalize('NFD').replace(/[\u0300-\u036f]/g, "").toUpperCase();
在波斯语和阿拉伯语中存在写相同的数字字符,但这些字符的代码不相同!如 :
ك
是阿拉伯字符
ک
是波斯语字符
我把这个字符改成波斯语然后解决
我在 mu 网站中使用 select2.js。我网站的语言是波斯语。我用此选项填充 select 元素
<select name="TrainDeparture" class="full-width select2" id="TrainDeparture">
<option value="165">كرج</option>
</select>
js:
(function ($) {
"use strict";
$.fn.select2.locales['fa'] = {
formatMatches: function (matches) { return matches + " نتیجه موجود است، کلیدهای جهت بالا و پایین را برای گشتن استفاده کنید."; },
formatNoMatches: function () { return "نتیجهای یافت نشد."; },
formatInputTooShort: function (input, min) { var n = min - input.length; return "لطفاً " + n + " نویسه بیشتر وارد نمایید"; },
formatInputTooLong: function (input, max) { var n = input.length - max; return "لطفاً " + n + " نویسه را حذف کنید."; },
formatSelectionTooBig: function (limit) { return "شما فقط میتوانید " + limit + " مورد را انتخاب کنید"; },
formatLoadMore: function (pageNumber) { return "در حال بارگیری موارد بیشتر…"; },
formatSearching: function () { return "در حال جستجو…"; }
};
$.extend($.fn.select2.defaults, $.fn.select2.locales['fa']);
})(jQuery);
$('.select2').select2();
当我在 select2 的搜索框中输入
ك
字符它显示消息没有找到结果但这是错误的。
I add arabic language to my keyboard and retest . In this case select2 found words currently . Now How can i fix this?
我遇到了类似的问题。我创建了一个自定义匹配器。
function customMatcher (params, data){
// Always return the object if there is nothing to compare
if ($.trim(params.term) === '') {
return data;
}
if (data.children && data.children.length > 0) {
// Clone the data object if there are children
// This is required as we modify the object to remove any non-matches
var match = $.extend(true, {}, data);
// Check each child of the option
for (var c = data.children.length - 1; c >= 0; c--) {
var child = data.children[c];
var matches = customMatcher(params, child);
// console.log(matches);
// If there wasn't a match, remove the object in the array
if (matches == null) {
match.children.splice(c, 1);
}
}
// If any children matched, return the new object
if (match.children.length > 0) {
return match;
}
// If there were no matching children, check just the plain object
return customMatcher(params, match);
}
var original = data.text.normalize('NFD').replace(/[\u0300-\u036f]/g, "").toUpperCase();
var term = params.term.normalize('NFD').replace(/[\u0300-\u036f]/g, "").toUpperCase();
// Check if the text contains the term
if (original.indexOf(term) > -1) {
return data;
}
// If it doesn't contain the term, don't return anything
return null;
}
$('select').select2({
matcher: customMatcher
});
与原版的主要区别在于如何删除变音符号。
var original = data.text.normalize('NFD').replace(/[\u0300-\u036f]/g, "").toUpperCase();
var term = params.term.normalize('NFD').replace(/[\u0300-\u036f]/g, "").toUpperCase();
在波斯语和阿拉伯语中存在写相同的数字字符,但这些字符的代码不相同!如 :
ك
是阿拉伯字符
ک
是波斯语字符
我把这个字符改成波斯语然后解决