簡體   English   中英

如果語句更有效,我怎么能寫這個呢?

[英]How can I write this else if statement more efficiently?

我有一個帶有一些css自定義按鈕的頁面,我希望當用戶點擊頁面上的其他位置時,所選按鈕會保持突出顯示。 我可以得到我想寫一個if / else語句來在選擇一個按鈕時分配一個類,如果沒有選擇但是它已經長時間啰嗦,我可以編寫它以提高效率嗎?

<input class="btn" id="moveIt_overall2" type="button" value="Overall" onclick="changeImpactState('impact_overall');"/>
<input class="btn" id="moveIt_customer" type="button" value="Customer" onclick="changeImpactState('impact_customer');" />
<input class="btn" id="moveIt_staff" type="button" value="Staff" onclick="changeImpactState('impact_staff');" />
<input class="btn" id="moveIt_strategic" type="button" value="Strategic" onclick="changeImpactState('impact_strategic');" />

var moveItOverall = document.getElementById('moveIt_overall2');
var moveItCustomer = document.getElementById('moveIt_customer');
var moveItStaff = document.getElementById('moveIt_staff');
var moveItStrategic = document.getElementById('moveIt_strategic');

if(currentImpactState == 'impact_overall'){
    moveItOverall.className = 'btn-on';
    moveItCustomer.className = 'btn';
    moveItStaff.className = 'btn';
    moveItStrategic.className = 'btn';
}else if(currentImpactState == 'impact_customer'){
    moveItOverall.className = 'btn';
    moveItCustomer.className = 'btn-on';
    moveItStaff.className = 'btn';
    moveItStrategic.className = 'btn';
}else if(currentImpactState == 'impact_staff'){
    moveItOverall.className = 'btn';
    moveItCustomer.className = 'btn';
    moveItStaff.className = 'btn-on';
    moveItStrategic.className = 'btn';
}else if(currentImpactState == 'impact_strategic'){
    moveItOverall.className = 'btn';
    moveItCustomer.className = 'btn';
    moveItStaff.className = 'btn';
    moveItStrategic.className = 'btn-on';
}

您實際上是將currentImpactState映射到DOM中的ID。 您可以顯式制作此地圖,然后使用它來查找要更改的對象。

const buttons = {
    impact_overall: 'moveIt_overall2',
    impact_customer: 'moveIt_customer',
    impact_staff: 'moveIt_staff',
    impact_strategic: 'moveIt_strategic'
}

// change everything
Object.values(buttons).forEach(id => document.getElementById(id).className = 'btn' )
// change the item currentImpactState indicates
document.getElementById(buttons[currentImpactState]).className = 'btn-on'

提取currentImpactState字符串的第二部分,然后迭代ID數組,檢查ID是否包含子字符串。 如果是,則設置為btn-on ,否則設置為btn

const substr = currentImpactState.slice(7);
['moveIt_overall2', 'moveIt_customer', 'moveIt_staff', 'moveIt_strategic'].forEach(id => {
  const element = document.getElementById(id);
  element.className = id.includes(substr)
    ? 'btn-on'
    : 'btn';
});

這是一個簡單的改進示例。

moveItOverall.className = 'btn';
moveItCustomer.className = 'btn';
moveItStaff.className = 'btn';
moveItStrategic.className = 'btn';

if(currentImpactState == 'impact_overall'){
    moveItOverall.className = 'btn-on';
}else if(currentImpactState == 'impact_customer'){
    moveItCustomer.className = 'btn-on';
}else if(currentImpactState == 'impact_staff'){
    moveItStaff.className = 'btn-on';
}else if(currentImpactState == 'impact_strategic'){
    moveItStrategic.className = 'btn-on';
}

更新

因為在早期版本的瀏覽器中不支持forEach ,所以將Mark Meyer的答案更改為簡單的JavaScript,如下所示:

const buttons = {
    impact_overall: 'moveIt_overall2',
    impact_customer: 'moveIt_customer',
    impact_staff: 'moveIt_staff',
    impact_strategic: 'moveIt_strategic'
}

for(var key in buttons)
{
    // if key equals currentImpactState
    // then set className as btn-on
    // else set to 'btn'
    document.getElementById(buttons[key]).className = (currentImpactState == key)? 'btn-on' : 'btn';
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM