4

私はこの大文字と小文字を区別しないカスタムセレクターを持っています:

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;
};

うまく機能しますが、アクセントがめちゃくちゃになります。私の質問は単純です。どうすればこのセレクターを大文字と小文字とアクセントを区別しないようにできますか?

正規表現で文字マップを使おうと思っていたのですが、うまく動かせないようです。

ご協力いただきありがとうございます。

4

2 に答える 2

4

私はこれを Github で見つけました

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;
};
于 2014-09-17T12:05:36.343 に答える
0

string.indexOf() を使用する代わりに、string.match() を正規表現を区別しないオプションと共に使用します。

何かのようなもの:

if (!text.match(new RegExp(words[i],'i'))){
   return false;
}

RegExp 比較では Unicode 文字が考慮されるため、大文字と小文字の間でアクセントが正しく一致します。

于 2014-01-27T15:21:13.433 に答える