2013-05-09 58 views
0

有没有一种更有效的方法来做下面的JavaScript的一点?我很想削减这个,但想不到一个办法。谢谢!

 var sizes = []; //This is a dynamic array from button clicks in an above menu that will include any of ['S','M','L','XL'] 
     sizes = ['S','M'] // We'll use this as an example saying that the S and M buttons are active. 
     $('div').each(function() { 
     var t = $(this); 
     var mysizes = t.attr('class').split(/\s+/); 
     var length = sizes.length; 
     if(length == 0) { 
      t.show(); 
     } 
     if(length == 1) { 
      if(t.hasClass(sizes[0])) { 
       t.show(); 
      } else { 
       t.hide(); 
      } 
     } 
     if(length == 2) { 
      if(t.hasClass(sizes[0]) || t.hasClass(sizes[1])) { 
       t.show(); 
      } else { 
       t.hide(); 
      } 
     } 
     if(length == 3) { 
      if(t.hasClass(sizes[0]) || t.hasClass(sizes[1]) || t.hasClass(sizes[2])) { 
       t.show(); 
      } else { 
       t.hide(); 
      } 
     } 
     if(length == 4) { 
      if(t.hasClass(sizes[0]) || t.hasClass(sizes[1]) || t.hasClass(sizes[2]) || t.hasClass(sizes[3])) { 
       t.show(); 
      } else { 
       t.hide(); 
      } 
     } 
    }); 

任何帮助将不胜感激。

回答

0

像这样

$(document).ready(function(){ 
    var sizes = []; 
    sizes = ['s','m']; 
    $("div").hide(); 
    $.each(sizes, function(index, item) { 
     $("."+item).show(); 
    }); 
});  

jsfiddle

+0

我不得不如此接近这一概念的东西,但无法得到它的工作。这是完美的,谢谢! – 2013-05-09 23:22:34

0

做这样的事情

t.hide(); 
if(length > 0){ 
    for (i = 0; i < length; ++i) { 
     for (j = 0; j <= i; ++j) { 
      if(t.hasClass(sizes[j])) { 
        t.show(); 
       } 
      } 
     } 
    } 
}