[英]How to apply same function to multiple elements at the same time?
我正在努力使代码在多个元素中同时运行,而不是依次执行。
关于代码功能的一些背景知识:
这段代码逐个地贯穿每个元素。 我试图使它运行,它同时执行。
function mover() { paras = Array.from(document.querySelectorAll('.working1')); jobelement = document.getElementById("jobend"); for (const para of paras) { if (para.innerHTML) { machinetext = para.textContent; var words = machinetext.split(' '); var mySubString = words[3].substring( words[3].lastIndexOf(" ") + 1, words[3].lastIndexOf(",") ); times = mySubString * 100; setTimeout(function() { jobelement.innerHTML = machinetext; console.log(mySubString); para.textContent = ""; mover(); }, times); break; } } } mover();
<p id="machine1" class="working1">Job No.78 (Cost, 62, C)</p> <p id="machine2" class="working1">Job No.68 (Cost, 67, B)</p> <p id="machine3" class="working1">Job No.68 (Cost, 93, A)</p> <p id="machine4" class="working1">Job No.68 (Cost, 45, C)</p> <p>------------------------------<p> <p id="jobend" class="jobends"></p>
我希望首先执行最低的延迟,然后再执行第二最低的延迟,依此类推。 目前的实际结果是,首先完成第一个元素,然后完成第二个元素,然后是第3个,然后是第4个。
您已经快到了,您只需要删除setTimeout
回调内部的递归调用(该调用仅根据元素的顺序而不是其时间延迟来链接元素),也请删除break
因为它使for
循环变得无用,并且使用let
在循环内声明变量,这样就不会出现此问题 (因此每个元素都有自己的延迟号,而所有元素的延迟号都不相同):
for (const para of paras) {
if (para.innerHTML) {
machinetext = para.textContent;
let words = machinetext.split(' ');
let mySubString = words[3].substring( // use let here (important)
words[3].lastIndexOf(" ") + 1,
words[3].lastIndexOf(",")
);
times = mySubString * 100;
setTimeout(function() {
jobelement.innerHTML = machinetext;
console.log(mySubString);
para.textContent = "";
// remove the recursive call to mover()
}, times);
// remove break
}
}
工作示例:
function mover() { paras = Array.from(document.querySelectorAll('.working1')); jobelement = document.getElementById("jobend"); for (const para of paras) { if (para.innerHTML) { machinetext = para.textContent; let words = machinetext.split(' '); let mySubString = words[3].substring( words[3].lastIndexOf(" ") + 1, words[3].lastIndexOf(",") ); times = mySubString * 100; setTimeout(function() { jobelement.innerHTML = machinetext; console.log(mySubString); para.textContent = ""; }, times); } } } mover();
<p id="machine1" class="working1">Job No.78 (Cost, 62, C)</p> <p id="machine2" class="working1">Job No.68 (Cost, 67, B)</p> <p id="machine3" class="working1">Job No.68 (Cost, 93, A)</p> <p id="machine4" class="working1">Job No.68 (Cost, 45, C)</p> <p>------------------------------<p> <p id="jobend" class="jobends"></p>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.