![](/img/trans.png)
[英]jquery airport plugin : How can I make it work with special characters?
[英]How can i treat 2 different special characters as the same with jquery/javascript?
我在网站上使用了Flexdatalist输入自动完成插件,并且工作正常,但是我遇到了一些特殊字符的怪异问题。
当我使用希腊语时,例如,每次输入字母“ά”时,它仅返回包含字母“α”的结果,而不返回包含字母“ά”的结果。
在希腊语中,字母“ά”和“α”是完全相同的,我想将它们视为相同的字符,因此每次我在搜索输入字段中输入包含字母“ά”的单词时也要检索这些单词包含字母“α”,反之亦然。
使用jQuery或Javascript甚至可能吗?
PS。 它可以是任何单个HTML5输入字段,而不仅仅是我上面提到的特定插件。
我认为最简单的方法应该是创建带有重音/无音值的字典或数组,然后尝试解析它们。 例如:
var mySyllabels = {"ά": "α", "á": "a", "ä": "a", "á": "a"};
然后创建一个函数,用其重音值替换每个重音字符。
理想的解决方案是重写输入的value
属性,以便在您(或任何插件)尝试访问input
的value
时执行含义相同的希腊字母的替换。 我试图实现这样的解决方案,但是IMO无法实现。 基本上,您需要在输入上调用Object.defineProperty
并覆盖value
的getter
。 但是, input.value
是javascript访问输入值的唯一方法。 这意味着,一旦您覆盖了该属性,就可以“切入唯一途径”到原始值。 看看由于这个限制,我的解决方案如何陷入无限递归:
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>
“最近”的解决方法是定义一个自定义属性,并在整个代码中使用该属性,即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, "α") } });
<input id="myInput" /> <button id="myBtn">Read value</button>
这远非理想,因为正如我所说, value
是使javascript访问输入中的文本的唯一属性,世界上每个插件都将依赖这一事实。 您还必须自定义插件,而不仅仅是使用greekAmbiguousValue
代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.