Javascript 在selectOneListbox或SelectOneMenu中筛选自定义项以忽略重音符号或特殊字符

Javascript 在selectOneListbox或SelectOneMenu中筛选自定义项以忽略重音符号或特殊字符,javascript,primefaces,Javascript,Primefaces,如何在这些Primefaces组件的搜索字段中进行过滤,以便它们忽略特殊字符,例如重音 要自定义过滤器,必须将filterMatchMode属性定义为“custom”,并在定义javascript函数的位置使用filterFunction=“myFilter”属性,如(466或470)中所定义 在本例中,我将自定义过滤器以忽略重音和包含的特殊字符(与filterMatchMode=“contains”相同) file.xhtml <p:selectOneListbox filter="tr

如何在这些Primefaces组件的搜索字段中进行过滤,以便它们忽略特殊字符,例如重音


要自定义过滤器,必须将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;
}