2017-01-27 19 views
0

すべてを表示したい.item最初の文字は変数と同じです。ローカル文字を置換して変数と比較する

問題 - 最初の文字がローカル文字の場合、それらを置換しようとしています - č-ć-đ-š-žはそれぞれc-c-d-s-zに置き換えてください。

このコードの後に​​、例えばĆaoというアイテムが表示されるとは思っても動作しません。

var a = 'c'; 
$('.item').each(function(){ 
    var b = $(this).text().charAt(0); 
    var mapObj = {č:"c", ć:"c", đ:"d", š:"s", ž:"z"}; 
    b = b.replace(/č|ć|đ|š|ž/i, function(matched){ 
     return mapObj[matched]; 
    }); 
    if (b == a) {$(this).show();} 
}); 

答えて

3

あなたは、単にあなたのmapObjアイテムが返される場合に.toLowerCase()を追加する必要があります。

var a = 'c'; 
 
$('.item').each(function() { 
 
    var b = $(this).text().charAt(0); 
 
    var mapObj = { 
 
    č: "c", 
 
    ć: "c", 
 
    đ: "d", 
 
    š: "s", 
 
    ž: "z" 
 
    }; 
 
    b = b.replace(/č|ć|đ|š|ž/i, function(matched) { 
 
    return mapObj[matched.toLowerCase()]; // map to lowercase char 
 
    }); 
 
    if (b.toLowerCase() == a.toLowerCase()) { // always compare like cases 
 
    $(this).show(); 
 
    } 
 
});
.item { 
 
    display: none; 
 
    width: 50px; 
 
    height: 50px; 
 
    background: #F00; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="item">Ćao</div>

あなたのマッチが鈍感であるにもかかわらず、それが自動的に文字が返さ変換しません。

+0

'/ i'は敏感ではないはずですか? – bonaca

+1

あなたのマッチは鈍感ですが、返された文字は自動的に変換されません。 –

+0

ありがとうございますが、変数 'a'が大文字の場合はどうなりますか?この手順のすべてを無防備にする方法はありますか? – bonaca

1

資本Ćと小文字ćは、2つの完全に異なる文字です。それに応じてマッピングテーブルを拡張する必要があります。

+0

'/ i'は敏感ではないはずですか? – bonaca

+0

@bonacaはい、正規表現のものではなく、実際に一致する文字が返されます。 – lonesomeday

関連する問題