2012-05-13 129 views
-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以獲得最佳性能?代替

+0

不優化性能,除非它是必要的。你真的有這方面的性能問題嗎? –

+0

是txt_animal,它的兄弟姐妹應該是全局變量? –

+0

你是否缺少第1行的美元符號? –

回答

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/

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); 
    }); 
} 
+1

你已經超越了我。我[小提琴](http://jsfiddle.net/shehovn/9kKKY/)。 –

+0

你真的測試過這段代碼嗎?它不僅包含不必要的重複本身,它也被打破。 – Alnitak