2012-09-10 94 views
1

我想簡化下面的條件語句。有沒有更好的方法來做到這一點?謝謝。如何簡化條件語句

if ($element.is('#resize')) { 
    css.left =+ 20; 
    css.top =+ 3; 

    if ($('#holder .Main').length < 5) { 
     img.css('display', 'none'); 
    } 

    img.insertBefore($element); 
    img.css(css); 

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

    if ($('#id .Main').length < 5) { 
     img.css('display', 'none'); 
    } 

    img.insertBefore($element); 
    img.css(css); 
} 
+3

您可能要張貼這種過度的http://codereview.stackexchange.com/ – j08691

+1

你想要什麼,以簡化? – jrummell

+0

如果您詳細描述了您正在嘗試完成/完成而不是發佈代碼,它也會有所幫助。 – Chase

回答

1
if($element.is('#resize') || $element.is('#bt_id3')){ 
    var elem = $element.is('#resize') ? $('#holder .Main') : $('#id .Main'); 
    css.left=+20; 
    css.top=+3; 
    if(elem.length<5){img.hide();} // USE HERE THE 'elem' VARIABLE and '.hide()' 
    img.insertBefore($element); 
    img.css(css); 
} 
+0

css頂部和左側僅適用如果元素是一個或另一個 - 但元素可能不是這兩種類型! – tucuxi

+1

Roko的一個問題 - 如果'element'不是'#resize'或'#id',這個代碼就會執行,它不等同於原始代碼。否則,它非常漂亮。 –

+0

謝謝@EthanBrown! **編輯我的回答** –

1

這不會改變任何工作方式,但它仍然不是太漂亮。幻數和缺乏的意見和上下文的很多做出奇怪的代碼...

var e = false; 
if ($element.is('#resize')) e = $('#holder .Main'); 
else if ($element.is('#bt_id3')) e = $('#id .Main'); 

if (e) { 
     css.left=+20; 
     css.top=+3; 
     if (e.length<5) { 
      img.css('display', 'none'); 
     } 
     img.insertBefore($element); 
     img.css(css); 
} 
+0

+1返回贊成:) –

2

ifelse子句之間唯一不同的是在內部if選擇。你可以這樣分離:

var eltId = false; 
if ($element.is('#resize')) eltId = '#holder'; 
if ($element.is('#bt_id3')) eltId = '#id'; 
if(eltId !== false) { 
    css.left=+20; 
    css.top=+3; 
    if($(eltId + ' .Main').length<5){img.css('display', 'none');} 
    img.insertBefore($element); 
    img.css(css); 
} 

這使得它有點DRYer。

+0

本質上投票我的答案,因爲兩者都是相同的(除了eltId vs實際保存參考和間距:-)。 – tucuxi

-1

快速重因子產量:

css.left = +20; 
css.top = +3; 

if ($element.is('#resize')) { 
    if ($('#holder .Main').length < 5) { 
     img.css('display', 'none'); 
    } 
} else if ($element.is('#bt_id3')) { 
    if ($('#id .Main').length < 5) { 
     img.css('display', 'none'); 
    } 
} 

img.insertBefore($element); 
img.css(css); 
+1

與羅科的答案一樣的問題。 –

0

這裏

$element.is("#resize") ? (css.left = 20, css.top = 3, 5 > $("#holder .Main") 
.length && img.css("display", "none"), img.insertBefore($element), img.css(css)) : $element.is("#bt_id3") && (css.left = 20, css.top = 3, 5 > $("#id .Main") 
.length && img.css("display", "none"), img.insertBefore($element), img.css(css))