jQuery每5个工作小时重置一次颜色模式

t98cgbkg  于 2023-08-04  发布在  jQuery
关注(0)|答案(4)|浏览(71)

我下面有一个基本的脚本,它从HTML中的字段(工作时间)中获取数字,然后匹配模式。如果特定工作时间达到1小时,则HTML文本(注解)的颜色会发生变化。
我的问题是如何使脚本变小,第二部分是如何重新设置颜色模式,以每5小时圈一圈。因此,如果工作时间达到20小时,则颜色图案应循环4次。
谢谢您的帮助!

var str = $(".work-hours").text();
        var pattern = /[0-9]+/;
        var match = str.match(pattern);

        if (parseInt(match) == 0) {
            $('.notes').css('color','white');
        }
        if ((parseInt(match) >= 1) && (parseInt(match) < 2)) {
            $('.notes').css('color','green');
        }
        if ((parseInt(match) >= 2) && (parseInt(match) < 3)) {
            $('.notes').css('color','yellow');
        }
        if ((parseInt(match) >= 3) && (parseInt(match) < 4)) {
            $('.notes').css('color','orange');
        }
        if ((parseInt(match) >= 4) && (parseInt(match) < 5)) {
            $('.notes').css('color','pink');
        }
        if (parseInt(match) >= 5) {
            $('.notes').css('color','red');
        }

字符串

2ledvvac

2ledvvac1#

由于parseInt使其对值取最低值,因此可以像这样简化代码

var str = $(".work-hours").text();
    var pattern = /[0-9]+/;
    var match = str.match(pattern);
    
    var colors = ['white', 'green', 'yellow', 'orange', 'pink', 'red'];

    $('.notes').css('color', colors[parseInt(match)]);

字符串
如果你想让它在添加更多小时数时环绕颜色,你也可以对匹配做一些逻辑处理,使它适合数组,或者用一种基本的方法扩展数组以增加额外的小时数。

var str = $(".work-hours").text();
    var pattern = /[0-9]+/;
    var match = str.match(pattern);
    
    var colors = ['white', 'green', 'yellow', 'orange', 'pink', 'red'];
    var color = colors[parseInt(match)%colors.length];
    $('.notes').css('color', color);

wkyowqbh

wkyowqbh2#

对于问题的第二部分,您可以使用setInterval函数根据特定的时间间隔运行任何函数。

function changeColor()
{
    ...
}

setInterval(changeColor, 5*60*60*1000); //Works every five hours

字符串

irtuqstp

irtuqstp3#

为了帮助回答第一个问题,因为if语句只有一行,所以不需要方括号。
要回答第二个问题,请使用mod符号%而不是等号。

var str = $(".work-hours").text();
    var pattern = /[0-9]+/;
    var match = str.match(pattern);

    if (parseInt(match)%5 === 0) 
        $('.notes').css('color','green');
    if (parseInt(match)%5 === 1)
        $('.notes').css('color','yellow');
    if (parseInt(match)%5 === 2) 
        $('.notes').css('color','orange');
    if (parseInt(match)%5 === 3) 
        $('.notes').css('color','pink');
    if (parseInt(match)%5 === 4)
        $('.notes').css('color','red');

字符串

fnatzsnv

fnatzsnv4#

  • 几乎相同的if语句的序列可以写成查找数组Map。
  • 由于正则表达式只提取整数,并且条件是整数的完整顺序,因此不需要>=
  • 一个curcular选择可以实现由模运算%

上面的应用到你的代码,它转换成:

colors = ['white', 'green', 'yellow', 'orange', 'pink', 'red'] ;
$('.notes').css('color',colors[$(".work-hours").text()
           .match(/[0-9]+/)[0] % colors.length]);

字符串

相关问题