Javascript 在selectOneListbox或SelectOneMenu中筛选自定义项以忽略重音符号或特殊字符
如何在这些Primefaces组件的搜索字段中进行过滤,以便它们忽略特殊字符,例如重音Javascript 在selectOneListbox或SelectOneMenu中筛选自定义项以忽略重音符号或特殊字符,javascript,primefaces,Javascript,Primefaces,如何在这些Primefaces组件的搜索字段中进行过滤,以便它们忽略特殊字符,例如重音 要自定义过滤器,必须将filterMatchMode属性定义为“custom”,并在定义javascript函数的位置使用filterFunction=“myFilter”属性,如(466或470)中所定义 在本例中,我将自定义过滤器以忽略重音和包含的特殊字符(与filterMatchMode=“contains”相同) file.xhtml <p:selectOneListbox filter="tr
要自定义过滤器,必须将filterMatchMode属性定义为“custom”,并在定义javascript函数的位置使用filterFunction=“myFilter”属性,如(466或470)中所定义 在本例中,我将自定义过滤器以忽略重音和包含的特殊字符(与filterMatchMode=“contains”相同) file.xhtml
<p:selectOneListbox filter="true" filterMatchMode="custom" filterFunction="contains" value="#{controllerBean.id}">
<f:selectItems value="#{controllerBean.list}" var="item" itemLabel="#{item.value}" itemValue="#{item.id}" />
</p:selectOneListbox>
如果使用特殊字符进行搜索,会发生什么情况?在我的情况下,没有必要进行比较,因为有必要比较每个筛选字符是否特殊,而不是替换itemLabel。我会说
返回itemLabel.includes(filterValue)| specialCharacters(itemLabel).includes(filterValue)代码>没错,它更完整,谢谢,我编辑了答案并添加了它,您好!
function contains(itemLabel, filterValue) {
return itemLabel.includes(filterValue) || specialCharacters(itemLabel).includes(filterValue);
}
function specialCharacters(input){
var c=input.toLowerCase();
c = c.replace(new RegExp("\\s", 'g'),"");
c = c.replace(new RegExp("[àáâãäå]", 'g'),"a");
c = c.replace(new RegExp("æ", 'g'),"ae");
c = c.replace(new RegExp("ç", 'g'),"c");
c = c.replace(new RegExp("[èéêë]", 'g'),"e");
c = c.replace(new RegExp("[ìíîï]", 'g'),"i");
c = c.replace(new RegExp("[òóôõö]", 'g'),"o");
c = c.replace(new RegExp("œ", 'g'),"oe");
c = c.replace(new RegExp("[ùúûü]", 'g'),"u");
c = c.replace(new RegExp("[ýÿ]", 'g'),"y");
return c;
}