我正在使用表的元素实现搜索(过滤器),一切正常,除非用户使用没有重音符号的搜索。
例如,表中有“Luis Perez”、“Juan Pérez”和“Pedro Pèrez”
如果用户想查看所有“Perez”并按原样写,则搜索将仅返回不带重音的姓氏 (Luis),隐藏其他带有重音的姓氏。
如何让搜索忽略重音符号?
我正在使用w3schools.com的教程
这是代码:
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
* {
box-sizing: border-box;
}
#myInput {
background-image: url('https://www.w3schools.com/css/searchicon.png');
background-position: 10px 10px;
background-repeat: no-repeat;
width: 100%;
font-size: 16px;
padding: 12px 20px 12px 40px;
border: 1px solid #ddd;
margin-bottom: 12px;
}
#myTable {
border-collapse: collapse;
width: 100%;
border: 1px solid #ddd;
font-size: 18px;
}
#myTable th, #myTable td {
text-align: left;
padding: 12px;
}
#myTable tr {
border-bottom: 1px solid #ddd;
}
#myTable tr.header, #myTable tr:hover {
background-color: #f1f1f1;
}
</style>
</head>
<body>
<input type="text" id="myInput" onkeyup="myFunction()" placeholder="Buscar..." title="Type in a name">
<table id="myTable">
<tr class="header">
<th style="width:60%;">Name</th>
<th style="width:40%;">Country</th>
</tr>
<tr>
<td>Luis Perez</td>
<td>Germany</td>
</tr>
<tr>
<td>Juan Pérez</td>
<td>Sweden</td>
</tr>
<tr>
<td>Pedro Pèrez</td>
<td>UK</td>
</tr>
</table>
<script>
function myFunction() {
var input, filter, table, tr, td, i;
input = document.getElementById("myInput");
filter = input.value.toUpperCase();
table = document.getElementById("myTable");
tr = table.getElementsByTagName("tr");
for (i = 0; i < tr.length; i++) {
td = tr[i].getElementsByTagName("td")[0];
if (td) {
if (td.innerHTML.toUpperCase().indexOf(filter) > -1) {
tr[i].style.display = "";
} else {
tr[i].style.display = "none";
}
}
}
}
</script>
</body>
</html>
您可以实现一个删除重音的函数(在用户输入和表值上,这都可以使用
indexOf
):这样,输入就没有重音了,它与表的值进行比较,也没有重音。该示例如下所示:
你可以在这里看到完整的教程,它被称为“重音折叠”:
https://alistapart.com/article/accent-folding-for-auto-complete
我有一个类似的问题,我认为有一个更简单的方法:
你可以尝试更换
有类似的东西:
它会做的是:
信用/参考链接: