如何使用jquery / javascript处理2个不同的特殊字符?

时间:2017-06-18 16:37:00

标签: javascript jquery

我在我的网站中使用Flexdatalist输入自动完成插件并且工作正常但我有一些特殊字符的奇怪问题。

由于我使用希腊语,每次输入字母“ά”时,它只返回包含字母“α”的结果,而不包含字母“ά”的结果。

在希腊语中,字母“ά”和“α”完全相同,我想将它们视为相同的字符,因此每次我在搜索输入字段中输入包含字母“ά”的单词以进行检索还包含字母“α”的单词,反之亦然。

这甚至可以用jQuery或Javascript吗?

PS。它可以是任何单个HTML5输入字段,而不仅仅是我上面提到的特定插件。

2 个答案:

答案 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;
&#13;
&#13;

&#34;最近&#34;解决方法是定义一个自定义属性并在您的代码中使用它,即greekAmbiguousValue

&#13;
&#13;
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;
&#13;
&#13;

这远非理想,因为我说value是唯一允许javascript访问输入内部文本的属性,并且世界上的每个插件都将依赖于这一事实。您还必须自定义插件,而不仅仅是使用greekAmbiguousValue

的代码