javascript - 精简 IF 语句,看起来有点过头了

标签 javascript jquery

对于 JQuery 来说,我有以下代码,我认为这有点过头了,因为我想做的就是将返回的值与选择的按钮相匹配,并添加/删除

星期几按钮的 HTML

<div class="form-horizontal" id="selectWeekdaysSection">
    <div class="form-group">
        <div class="col-md-offset-2 col-lg-4">
            <button id="mon" name="weekdaysbutton" class="btn btn-default" type="button" value="Mon">Mon</button>
            <button id="tue" name="weekdaysbutton" class="btn btn-default" type="button" value="Tue">Tue</button>
            <button id="wed" name="weekdaysbutton" class="btn btn-default" type="button" value="Wed">Wed</button>
            <button id="thur" name="weekdaysbutton" class="btn btn-default" type="button" value="Thur">Thur</button>
            <button id="fri" name="weekdaysbutton" class="btn btn-default" type="button" value="Fri">Fri</button>
            <button id="sat" name="weekenddaysbutton" class="btn btn-default" type="button" value="Sat">Sat</button>
            <button id="sun" name="weekenddaysbutton" class="btn btn-default" type="button" value="Sun">Sun</button>
        </div>
    </div>
</div>

在网站上提供此内容

enter image description here

数据表数据

enter image description here

当我调用并从 DataTable 取回数据时,它会从 JSON 中预先选择日期。我已经完成了所有这些工作,但正如我所说,必须为不同的按钮不断重复 IF 尤其是当我必须在“01 - 31”天执行此操作时似乎太过分了

Jquery

var selectedDays = modifyRecordData.selectedDays;
var splitSelectedDays = selectedDays.split(',');

splitSelectedDays.forEach(day => {
    let val = day.trim();

    if(val == 'Mon') {
        $('#mon').removeClass('btn-default');
        $('#mon').addClass('btn-primary');
    }

    if (val == 'Tue') {
        $('#tue').removeClass('btn-default');
        $('#tue').addClass('btn-primary');
    }

    if (val == 'Wed') {
        $('#wed').removeClass('btn-default');
        $('#wed').addClass('btn-primary');
    }

    if (val == 'Thur') {
        $('#thur').removeClass('btn-default');
        $('#thur').addClass('btn-primary');
    }

    if (val == 'Fri') {
        $('#fri').removeClass('btn-default');
        $('#fri').addClass('btn-primary');
    }

    if (val == 'Sat') {
        $('#sat').removeClass('btn-default');
        $('#sat').addClass('btn-primary');
    }

    if (val == 'Sun') {
        $('#sun').removeClass('btn-default');
        $('#sun').addClass('btn-primary');
    }
})

Console.返回数据的日志 enter image description here

最佳答案

您要遵循的技术称为“不要重复自己”,简称“DRY”。

在这种情况下,day 始终与您想要定位的元素的 id 相同,因此您可以从中手动构建选择器字符串。您还可以使用 toggleClass() 代替交替的 addClass()removeClass() 调用。试试这个:

splitSelectedDays.forEach(day => {
  let dayName = day.trim().toLowerCase();
  $('#' + dayName).toggleClass('btn-default btn-primary');
})

关于javascript - 精简 IF 语句,看起来有点过头了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54942075/

相关文章:

javascript - 为什么 trim() 不与 $.each 一起删除字符串数组中的空格

javascript - Node.js:拆分 n 部分的流内容

javascript - 嵌套类上的 jQuery 单击方法

javascript - 如何使用 JavaScript 或 jQuery 清除 Google Chrome、Mozilla Firefox 和 Safari 中的剪贴板数据

javascript - 如何在 JQuery 中单击最近的元素(复选框)时禁用下一个元素(文本区域)?

javascript - 适用于除三星互联网外的所有浏览器/设备的逻辑

javascript - Socket.io,广播发射,似乎仅使用最新连接的套接字

javascript - 我应该如何将同步node.js模块与mysql、socket功能一起应用?

javascript - JQuery - 单击时切换文本无法正常工作

javascript - 'mouseenter' 和 'mouseleave' 事件一直以 div 作为光标触发