![](/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.