Javascript 值的自动求和;/代码循环
情况描述: 我有class=“start”中描述的时间输入和class=“end”中描述的时间输入。根据公式“end start=actual”计算差异。“actual”是时间输入。实际输入应加起来,并用id=“sum\u Actual”(type=text)写入输入 问题:Javascript 值的自动求和;/代码循环,javascript,html,frontend,Javascript,Html,Frontend,情况描述: 我有class=“start”中描述的时间输入和class=“end”中描述的时间输入。根据公式“end start=actual”计算差异。“actual”是时间输入。实际输入应加起来,并用id=“sum\u Actual”(type=text)写入输入 问题: 在这个问题上,我有两个问题: a) 我不知道如何循环对单个输入进行汇总的代码class=actual,最终有30多个 b) 代码的编写方式是,我必须在input class=actual中手动输入时间,以便更新为整个总和,
//求和值的代码从实际类/应该循环它
函数msToTime(持续时间){
var分钟=数学楼层((持续时间/(1000*60))%60),
小时=数学楼层(持续时间/(1000*60*60));
小时=小时<10?“0”+小时:小时;
分钟=分钟<10?“0”+分钟:分钟;
返回时间+“:”+分钟;
}
控制台日志(msToTime(300000));
函数sum_diff(){
zxc=document.getElementById(“实际值1”).value;
xcz=document.getElementById(“实际_2”).值;
czx=document.getElementById(“实际_3”).值;
zxc=zxc.拆分(“:”);
xcz=xcz.split(“:”);
czx=czx.拆分(“:”);
var zxcDate=新日期(0,0,0,zxc[0],zxc[1],0);
var xczDate=新日期(0,0,0,xcz[0],xcz[1],0);
var czxDate=新日期(0,0,0,czx[0],czx[1],0);
var zxcMs=
zxcDate.getHours()*60*60*1000+
zxcDate.getMinutes()*60*1000;
var-xczMs=
xczDate.getHours()*60*60*1000+
xczDate.getMinutes()*60*1000;
var-czxMs=
czxDate.getHours()*60*60*1000+
getMinutes()*60*1000;
var ms=zxcMs+xczMs+czxMs;
返回msToTime(毫秒);
}
var elements=document.getElementsByClassName(“实际”);
对于(var i=0;i
获取数组中的所有
实际值,然后使用矩计算总持续时间
//const durations=document.getElementsByClassName('actual').map(输入=>input.value);
//比如说,我们得到了以下持续时间
施工持续时间=['01:30','05:00','10:20'];
const totalDuration=持续时间。切片(1)
.减少((上一个,当前)=>瞬间持续时间(当前)。增加(上一个),
持续时间(持续时间[0]);
const requiredOutput=`${totalDuration.asHours().toFixed(0)}:${totalDuration.minutes().toString().padStart(2,'0')}`;
console.log(requiredOutput)
当遇到这种情况时,我喜欢将我的大问题分解成非常小的问题,并制作非常小的函数,这些函数只做一件事,但要做好:
const-actuals=[…document.getElementsByClassName(“实际”)];
document.querySelector('table')。addEventListener('change',函数(e){
const classList=e.target.classList;
if(classList.contains('start')| | classList.contains('end')){
//检索相关的输入
const tr=e.target.parentNode.parentNode;
const[start,end,actual]=[…tr.querySelectorAll('.start,.end,.actual');
const value=diff(start.value,end.value);
实际值=实际值;
updateActualSum();
}
});
//加载后更新总持续时间
updateActualSum();
函数msToTime(持续时间){
常数分钟=数学楼层((持续时间/(1000*60))%60),
小时=数学楼层(持续时间/(1000*60*60));
返回两个或多个数字(小时)+“:”+两个或多个数字(分钟);
}
函数两位或更多位(n){
返回n<10?'0'+n:n;
}
函数timeToMs(时间){
if(time){//如果未设置该值,则可能为“”
const[hours,minutes]=time.split(“:”).map(str=>parseInt(str,10));
返回时间(小时*60+分钟)*60*1000;
}
返回0;
}
函数sum_diff(){
const sum=实际减少值((acc,el)=>acc+timeToMs(el.值),0);
返回msToTime(总和);
}
功能差异(开始、结束){
返回msToTime(timeToMs(end)-timeToMs(start));