-1

jQueryを使ってクラスを追加してみます。

var tit = ('.tit a');
txt_animal = ['pig','horse','rabbit','cat','monkey'];
txt_fruit = ['melon','apple','kiwi','orange'];
txt_hobby = ['movie','ski','swim','dance','internet','baseball'];

$(txt_animal).each(function(i,v){
    $(tit + ':contains("'+ v +'")').addClass('tag tag_animal');
}
$(txt_fruit).each(function(i,v){
    $(tit + ':contains("'+ v +'")').addClass('tag tag_fruit');
}
$(txt_hobby).each(function(i,v){
    $(tit + ':contains("'+ v +'")').addClass('tag tag_hobby');
}

それは正常に動作します。しかし、私はこれよりも良い方法だと思います。
最高のパフォーマンスを得るために JavaScript を最適化する方法は?

4

2 に答える 2

1

代わりにDRY用に最適化してください。

var tit = ('.tit a');
var txt = {
  "animal": ['pig','horse','rabbit','cat','monkey'],
  "fruit": ['melon','apple','kiwi','orange'],
  "hobby": ['movie','ski','swim','dance','internet','baseball']
};

for (var cat in txt) {
  $(txt[cat]).each(function(i,v){
    $(tit + ':contains("'+ v +'")').addClass('tag tag_' + cat);
  });
}
于 2012-05-13T14:33:06.377 に答える
1

以下のコードは、タグのクラスごとに正規表現を使用することで、繰り返される (そしてコストのかかる) DOM クエリと可能な一致による繰り返しの繰り返しの両方を回避する必要があります。

var txt = {
  animal: /(pig|horse|rabbit|cat|monkey)/i,
  fruit: /(melon|apple|kiwi|orange)/i,
  hobby: /(movie|ski|swim|dance|internet|baseball)/i
};

$('.tit a').each(function() {
    var $this = $(this);       // saves three calls to `$(this)`
    var t = $this.text();      // get the text contents of the link

    for (var tag in txt) {     // for each key word
       if (txt[tag].test(t)) { // test the text against the regexp
           $this.addClass('tag').addClass('tag_' + tag);
       }
    }
});

http://jsfiddle.net/alnitak/DFcFH/1/を参照してください

于 2012-05-13T14:55:21.800 に答える