我在我的网站中使用Flexdatalist输入自动完成插件并且工作正常但我有一些特殊字符的奇怪问题。
由于我使用希腊语,每次输入字母“ά”时,它只返回包含字母“α”的结果,而不包含字母“ά”的结果。
在希腊语中,字母“ά”和“α”完全相同,我想将它们视为相同的字符,因此每次我在搜索输入字段中输入包含字母“ά”的单词以进行检索还包含字母“α”的单词,反之亦然。
这甚至可以用jQuery或Javascript吗?
PS。它可以是任何单个HTML5输入字段,而不仅仅是我上面提到的特定插件。
答案 0 :(得分:0)
我认为最简单的方法是创建一个带有重音/非重音值的字典或数组,然后尝试解析它们。例如:
var mySyllabels = {"ά": "α", "á": "a", "ä": "a", "á": "a"};
然后创建一个函数,用非重音值替换每个重音字符。
答案 1 :(得分:0)
理想的解决方案是覆盖输入的value
属性,以便每当您(或任何插件)尝试访问input
时,它都会执行相同意义的希腊字母替换#39; s value
。我试图实现这样的解决方案,但IMO无法实现。基本上,您需要在输入中调用Object.defineProperty
并覆盖getter
value
。但是,input.value
是javascript访问输入值的 ONLY 方式。这意味着一旦你覆盖了这个属性,你就可以削减你唯一的方式"到原来的价值。由于这个限制,看看我的解决方案如何陷入无限递归:
var input = document.getElementById("myInput");
var btn = document.getElementById("myBtn");
btn.addEventListener("click", function() {
console.log(input.value);
});
Object.defineProperty(input, 'value', {
get: function() {
return this.value.replace(/ά/g, "α")
}
});

<input id="myInput" />
<button id="myBtn">Read value</button>
&#13;
&#34;最近&#34;解决方法是定义一个自定义属性并在您的代码中使用它,即greekAmbiguousValue
:
var input = document.getElementById("myInput");
var btn = document.getElementById("myBtn");
btn.addEventListener("click", function() {
console.log(input.greekAmbiguousValue);
});
Object.defineProperty(input, 'greekAmbiguousValue', {
get: function() {
return this.value.replace(/ά/g, "α")
}
});
&#13;
<input id="myInput" />
<button id="myBtn">Read value</button>
&#13;
这远非理想,因为我说value
是唯一允许javascript访问输入内部文本的属性,并且世界上的每个插件都将依赖于这一事实。您还必须自定义插件,而不仅仅是使用greekAmbiguousValue