繁体   English   中英

我如何将2个不同的特殊字符与jquery / javascript一样对待?

[英]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属性,以便在您(或任何插件)尝试访问inputvalue时执行含义相同的希腊字母的替换。 我试图实现这样的解决方案,但是IMO无法实现。 基本上,您需要在输入上调用Object.defineProperty并覆盖valuegetter 但是, 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM