-1

文字列を文字列 KAP に置換する if 条件は複数あります。

var nameList = $('#name').text();

if(nameList.indexOf('SAM') > -1){
    var newName = nameList.replace(/SAM/g, 'KAP');
    $('#name').html(newName);
}

if(nameList.indexOf('PAT') > -1){
    var newName = nameList.replace(/PAT/g, 'KAP');
    $('#name').html(newName);
}

以下のように配列に新しい名前が既に存在する場合、上記の2つをjquery/javascriptを使用して単一のif条件にまとめるにはどうすればよいですか

var nameArray = ['SAM','PAT','DAB'];

上記のいずれかが nameList で見つかった場合、他の条件はチェックされません。

4

4 に答える 4

1
var nameList = $('#name').text();

var nameArray = ['SAM','PAT','DAB'];
nameArray.some(function(name) {
    if (!!~nameList.indexOf(name)) {
        nameList.replace(new RegExp(name, 'gi'), 'KAP');
        return true;
    }
    return false;
});

Array.some メソッドは、関数が true を返すまで、配列の要素を繰り返し処理します。Mozilla 開発者のドキュメントをチェックアウト

!!~ は、-1 だけが false になるオペランドの組み合わせです。

于 2013-11-14T19:21:48.627 に答える
0

どうぞ:

JS フィドル: http://jsfiddle.net/2F4dG/2/

HTML

<div id="name">Hi my name is Sam. Sam is cool.</div>

コード

$(function(){
    var nameList = $('#name').text()

    var nameArray = ['SAM','PAT','DAB'];

    //loop through all possible names
    for(var i=0;i<nameArray.length;i++){
        if(nameList.toUpperCase().indexOf(nameArray[i])!=-1){
            //new regex out of name we are replacing...
            var re = new RegExp(nameArray[i],"gi");
            //replacae all matches
            var newName = nameList.replace(re,"KAP");
            //set new name
            $('#name').html(newName);
            //exit loop we found our match...
            break;
        }
    }
});

出力

Hi my name is KAP. KAP is cool.

于 2013-11-14T19:24:51.600 に答える
0

最も基本的には、次のことをお勧めします。

var nameArray = ['SAM','PAT','DAB'],
    reg = new RegExp('(' + nameArray.join('|') + ')', 'i'),
if (reg.test(nameList)) {
    // one of those names was found
}
else {
    // none of those names were found
}

単純化された JS Fiddle デモ

于 2013-11-14T19:11:18.257 に答える