我有这种不区分大小写的自定义选择器:
jQuery.expr[':'].Contains = function(a,i,m) {
var text = jQuery(a).text().toUpperCase();
var words = m[3].split(/\s+/);
for(var i = 0; i < words.length; i++) {
if (-1 == text.indexOf(words[i].toUpperCase())) {
return false;
}
}
return true;
};
它工作正常,但它会被重音混乱。我的问题很简单,我怎样才能使这个选择器大小写和重音不敏感?
我正在考虑使用带有正则表达式的字符映射,但我似乎无法让它正常运行。
感谢您的帮助。
答案 0 :(得分:3)
我在Github上发现了这个,它对我很有用: https://gist.github.com/oziks/3664787
jQuery.expr[':'].contains = function(a, i, m) {
var rExps=[
{re: /[\xC0-\xC6]/g, ch: "A"},
{re: /[\xE0-\xE6]/g, ch: "a"},
{re: /[\xC8-\xCB]/g, ch: "E"},
{re: /[\xE8-\xEB]/g, ch: "e"},
{re: /[\xCC-\xCF]/g, ch: "I"},
{re: /[\xEC-\xEF]/g, ch: "i"},
{re: /[\xD2-\xD6]/g, ch: "O"},
{re: /[\xF2-\xF6]/g, ch: "o"},
{re: /[\xD9-\xDC]/g, ch: "U"},
{re: /[\xF9-\xFC]/g, ch: "u"},
{re: /[\xC7-\xE7]/g, ch: "c"},
{re: /[\xD1]/g, ch: "N"},
{re: /[\xF1]/g, ch: "n"}
];
var element = $(a).text();
var search = m[3];
$.each(rExps, function() {
element = element.replace(this.re, this.ch);
search = search.replace(this.re, this.ch);
});
return element.toUpperCase()
.indexOf(search.toUpperCase()) >= 0;
};
答案 1 :(得分:0)
不使用string.indexOf(),而是将string.match()与正则表达式不敏感选项一起使用。
类似的东西:
if (!text.match(new RegExp(words[i],'i'))){
return false;
}
RegExp比较考虑了Unicode字符,因此重音符号将在大写和小写之间正确匹配。