2012-09-06 114 views
0

我想simplfy我大量else if语句。有更好的方法来获得较短的代码吗? 大多数情况使用不同的CSS属性和插入方式/附加到元素..Simplfy海量如果else语句

感谢您的帮助!

var img = $("<img src='images//anim.gif class='Img'>"); 

      var cssProp = {'position':'absolute', 
         'z-index':99, 
         'top': topPos, 
         'left': leftPos 
      } 

//$element var represent all kinds of elements I have in my DOM   

      if($element.attr('id')=='count' || $element.attr('id')=='assign'){ 
       img.prependTo($element)   
      }else if($element.is('#title')){ 
       cssProp.top=+20; 
       img.insertBefore($element); 

      }else if($element.is('#tab')){ 
       detail_img = $("<img src='images/anim.gif' id='tab1' class='Img'>"); 
       detail_img.insertBefore($element.parent()); 
       detail_img.css(cssProp); 

      }else if($element.is('#tab2')){ 
       detail_img = $("<img src='images/anim.gif' id='tab2' class='Img'>"); 
       detail_img.insertBefore($element.parent()); 
       detail_img.css(cssProp);   

      }else if ($element.is('#e_btn')){ 
       cssProp.left=+20; 
       cssProp.top=+3; 
       img.insertBefore($element); 
       img.css(cssProp); 

      }else if($element.is('#date_set')){ 
       img.insertBefore($element); 

      }else if($element.is('td')){ 
       img.prependTo($element).css(cssProp); 

      }else if($element.is('#l_title')){ 
       cssProp.top+=10; 
       img.insertBefore($element); 
       img.css(cssProp); 

      }else if($element.is('#status')){ 
       cssProp.top =+10; 
       img.insertBefore($element).css(cssProp); 

      }else if($element.is('label')){ 
       img.appendTo($element) 

      }else if($element.closest('#divTab').length>0){ 
       ($element.attr('id')=='work')? cssProp.left+=10 : ''; 
       cssProp.top+=5; 
       img.insertBefore($element); 
       img.css(cssProp) 
      }else{  
       img.insertBefore($element); 
       img.css(cssProp) 
      } 
+1

你有一个网站,我们可以看看?看起来你需要采取不同的方法。 –

+0

我注意到的第一件事是你使用cssProp.left = + 20而不是cssProp.left + = 20是否是故意的? – karthikr

+0

@FrederikWordenskjold抱歉,我没有。这是一个大项目,它将需要永远解释.. – Rouge

回答

1

为了减少行数:

  • 减少每if{}子句中表达下降到一条线 - 这是相当微不足道。如有必要,请使用$.extend()来操作cssProp
  • 一些表达式是相同的,因此它们的if条件也可以与||复合。
  • 删除空行。

这样做,我得到的if/else链从49到21行。

为了提高运行效率与下面的语句开始:

var id = $element.attr('id'); 
var tag = $element.get(0).tagName; 

OK,这增加了2号线早在

然后,在if条件下,idtag执行字符串比较而不是使用jQuery表达式。唯一的例外是if($element.closest('#divTab').length>0),它不遵循相同的模式。