3

以下のコードを単純化するにはどうすればよいですか? if ステートメントを取り除くにはどうすればよいですか? ajax 応答のいくつかの行を強調したいと思います。現在、比較する 2 つの文字列 = 2 つの if があります。この数は増えるので、文字列が data_array 要素の一部である場合に強調表示する必要がある文字列の配列を使用して、これを別の方法で行うことを考えています。

私は JavaScript のみのソリューションを好みますが、jQuery も問題ありません。

    data_array=data.split('<BR>');
    for(var i=0, len=data_array.length; i < len; i++){
        if (data_array[i].indexOf('Conflict discovered') >= 0){
            data_array[i]="<span class='red'>"+data_array[i]+"</span>";
        }   
        if (data_array[i].indexOf('Syntax error') >= 0){
            data_array[i]="<span class='red'>"+data_array[i]+"</span>";
        }   
    }
    data=data_array.join('<BR>');
4

5 に答える 5

4

for別のループを追加してみませんか?

data_array=data.split('<BR>');

var stringsToFind = ['Conflict discovered', 'Syntax error'];

for (var i = 0; i < data_array.length; i++) {

    for (var j = 0; j < stringsToFind.length; j++) {

        var currItem = data_array[i];

        if (currItem.indexOf(stringsToFind[j]) >= 0) {

            data_array[i]='<span class="red">' + currItem + '</span>';
        }
    }  
}

data = data_array.join('<BR>');

jQuery (注意、遅くなる可能性があり、まだテストしていません)

data_array=data.split('<BR>');

var stringsToFind = ['Conflict discovered', 'Syntax error'];

$.each(data_array, function(i, item) {
    $.each(stringsToFind, function(j, s) {
        if (item.indexOf(s) >= 0) {
            data_array[i]='<span class="red">' + item + '</span>';
        }
    }
});

data = data_array.join('<BR>');
于 2012-10-16T01:35:21.860 に答える
3

必要に応じて配列に要素を追加します:)

data.replace( /<br>/ig, '\n' ).replace(
    new RegExp( '^(.*(?:' + [
          'Conflict discovered'
        , 'Syntax error'
    ].join( '|' ) + ').*)$', 'gm' )
, '<span class="red">$1</span>' ).replace( /\n/g, '<br>' );

説明:

  • <br>タグを改行に置き換える
  • 正規表現を作成します:^(.*(?:Conflict discovered|Syntax error).*)$
  • サラウンドマッチ<span class="red">...</span>
  • 改行を<br>タグに戻す
于 2012-10-16T01:53:05.753 に答える
2
var data_array = data.split('<BR>');
var errMsgs = ['Conflict discovered', 'Syntax error'];
data_array = data_array.map(function(data_rec) {
    var isAnError = errMsgs.some(function (errMsg) {
        return data_rec.indexOf(errMsg) >= 0;
    });
    if (isAnError) {
        return "<span class='red'>" + data_rec + '</span>';
    } else {
        return data_rec;
    }
});
于 2012-10-16T01:45:56.700 に答える
1

jsBin デモ

var highlightWords = ['Conflict discovered', 'Syntax error', 'Simply cool'];

for(i=0; i<highlightWords.length; i++){
  var regex = new RegExp(highlightWords[i],'ig');
  data= data.replace( regex, '<span class="red">'+ highlightWords[i] +'</span>');
}

$('div').html( data );


jsBin デモ 2 全行ハイライト

var words = ['Conflict discovered', 'Syntax error', 'Strange'];
var data_array=data.split('<BR>');

for(n=0;n<words.length;n++){
  for(i=0; i<data_array.length; i++){
      if (data_array[i].indexOf( words[n] ) >= 0){
           data_array[i]="<span class='red'>"+data_array[i]+"</span>";
      }   
  }
  data = data_array.join('<BR>');
}

$('div').html( data );
于 2012-10-16T01:48:12.673 に答える
0
data_array=data.split('<BR>');
for(var i=0, len=data_array.length; i < len; i++){
    var dai = data_array[i];
    if (dai.indexOf('Conflict discovered') >= 0 || dai.indexOf('Syntax error') >= 0){
        data_array[i] = "<span class='red'>"+dai+"</span>";
    }   
}
data=data_array.join('<BR>');
于 2012-10-16T01:30:37.667 に答える