我对这一切都是新手,所以如果我错过了明显的事情,请原谅我。我正在构建一种工具,该工具应该跟踪针对特定目标,针对特定学生的评估数据。我使用JavaScript和jQuery构建了一个函数,该函数执行以下操作:1.初始化新学生的数组(currentStudentArray)。2.对于每个目标,初始化一个数组以保存评估数据(newEvalArray),获取目标名称,然后进行每次评估。3.对于每个评估,它都会获得日期,分数和分数百分比;它将评估数据打包到一个对象中,然后将对象发送到保存评估数据的数组(newEvalArray)。4.回到每个目标级别:将目标名称和评估数组打包到一个对象中,将该对象发送到currentStudentArray。5.最后,学生
问题是我的newEvalArray不会在每个目标周期都重新启动,而是将上一个目标的所有评估与下一个目标的评估堆叠在一起,然后存储这两个目标的所有评估。我想做的只是将针对该目标的评估存储在该目标下。我对应用程序的了解还不够,无法测试currentStudentsArray发生了什么,但是我怀疑一旦我有多个目标不同的学生,它将遇到同样的问题。但是我还没有达到这个水平。现在,我只想弄清楚newEvalArray发生了什么。预期的输出:控制台应记录两个评估数组(每个目标一个),其长度为4(基于我目前在HTML中的占位符)。而是记录长度为8的数组,它们包含每个目标的所有评估。这是该函数的代码:
var currentStudent = "Steve";
var studentsGoalsArray = [];
var studentGoalUpdate = function () {
var currentStudentArray = [];
$(".goal").each(function(){
var newEvalArray = [];
var goalName = $(this).children("h2").text();
console.log("Goal name is: " + goalName);
$(".goal-eval").each(function(){
var evalDate = $(this).children("p").text();
console.log("EvalDate is: " + evalDate);
var scoreContainerEl = $(this).children("div");
var scoreContainerChildren = scoreContainerEl.children();
var evalScore = scoreContainerChildren[0].textContent;
console.log("EvalScore is: " + evalScore);
var scorePercent = scoreContainerChildren[1].textContent;
console.log("ScorePercent is: " + scorePercent);
console.log(evalDate, evalScore, scorePercent);
var evalObj = {date: evalDate, score: evalScore, percent: scorePercent};
console.log(evalObj);
newEvalArray.push(evalObj);
console.log(newEvalArray);
});
var goalDataObj = {goal: goalName, eval: newEvalArray}
currentStudentArray.push(goalDataObj);
console.log(currentStudentArray);
});
studUpdateArrayData = {student: currentStudent, data: currentStudentArray}
studentsGoalsArray.push(studUpdateArrayData);
console.log(studentsGoalsArray);
};
$("#newEvalBtn").on("click", studentGoalUpdate);
<div class="col" id="goals-wrapper">
<!--Goals displayed here-->
<div class="col bg-light d-flex justify-content-between flex-wrap border-top-0" id="goals-container">
<div class="goal col-11 col-md-5 card my-3 bg-goal p-0">
<h2 class="p-2">Yes/No</h2>
<div class="p-3 bg-white mx-1 mb-1 overflow-auto">
<h3>Goal description:</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<button class="btn bg-goal mb-3" id="newEvalBtn">New Evaluation</button>
<div class="list-group d-flex">
<div class="goal-eval list-group-item bg-goal">
<p class="evalDate">10/15/2020</p>
<div class="d-flex justify-content-between">
<p class="score border-bottom">3/10</p> <p class="scorePercent border-bottom">30%</p>
</div>
</div>
<div class="goal-eval list-group-item bg-goal">
<p>11/15/20202</p>
<div class="d-flex justify-content-between">
<p class="border-bottom">5/10</p> <p class="border-bottom">50%</p>
</div>
</div>
<div class="goal-eval list-group-item bg-goal">
<p>12/15/2020</p>
<div class="d-flex justify-content-between">
<p class="border-bottom">6/10</p> <p class="border-bottom">60%</p>
</div>
</div>
<div class="goal-eval list-group-item bg-goal">
<p>1/15/2020</p>
<div class="d-flex justify-content-between">
<p class="border-bottom">9/10</p> <p class="border-bottom">90%</p>
</div>
</div>
</div>
</div>
</div>
<div class="goal col-11 col-md-5 card my-3 bg-goal p-0">
<h2 class="p-2">When</h2>
<div class="p-3 bg-white mx-1 mb-1 overflow-auto">
<h3>Goal description:</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<button class="btn bg-goal mb-3" id="newEvalBtn">New Evaluation</button>
<div class="list-group d-flex">
<div class="goal-eval list-group-item bg-goal">
<p class="evalDate">10/25/2020</p>
<div class="d-flex justify-content-between">
<p class="score border-bottom">5/10</p> <p class="scorePercent border-bottom">50%</p>
</div>
</div>
<div class="goal-eval list-group-item bg-goal">
<p>11/25/2020</p>
<div class="d-flex justify-content-between">
<p class="border-bottom">7/10</p> <p class="border-bottom">70%</p>
</div>
</div>
<div class="goal-eval list-group-item bg-goal">
<p>12/25/2020</p>
<div class="d-flex justify-content-between">
<p class="border-bottom">8/10</p> <p class="border-bottom">80%</p>
</div>
</div>
<div class="goal-eval list-group-item bg-goal">
<p>01/25/2020</p>
<div class="d-flex justify-content-between">
<p class="border-bottom">10/10</p> <p class="border-bottom">100%</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
您的newEvalArray
重置很好,但是您用所有目标评估来填补它。
发生这种情况是因为您使用$(".goal-eval").each
来查找.goal-eval
页面中的所有节点,而不仅仅是当前节点下的所有节点.goal
。
您需要添加正确的上下文以限制搜索。由于该行位于$(".goal").each
处理程序内部,因此您可以将其this
作为第二个参数。
因此,使用(".goal-eval", this).each
应该可以解决您的问题。
var currentStudent = "Steve";
var studentsGoalsArray = [];
var studentGoalUpdate = function () {
var currentStudentArray = [];
$(".goal").each(function(){
var newEvalArray = [];
var goalName = $(this).children("h2").text();
$(".goal-eval", this).each(function(){
var evalDate = $(this).children("p").text();
var scoreContainerEl = $(this).children("div");
var scoreContainerChildren = scoreContainerEl.children();
var evalScore = scoreContainerChildren[0].textContent;
var scorePercent = scoreContainerChildren[1].textContent;
var evalObj = {date: evalDate, score: evalScore, percent: scorePercent};
newEvalArray.push(evalObj);
});
var goalDataObj = {goal: goalName, eval: newEvalArray}
currentStudentArray.push(goalDataObj);
});
studUpdateArrayData = {student: currentStudent, data: currentStudentArray}
studentsGoalsArray.push(studUpdateArrayData);
console.log(studentsGoalsArray);
};
$("#newEvalBtn").on("click", studentGoalUpdate);
<div class="col" id="goals-wrapper">
<!--Goals displayed here-->
<div class="col bg-light d-flex justify-content-between flex-wrap border-top-0" id="goals-container">
<div class="goal col-11 col-md-5 card my-3 bg-goal p-0">
<h2 class="p-2">Yes/No</h2>
<div class="p-3 bg-white mx-1 mb-1 overflow-auto">
<h3>Goal description:</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<button class="btn bg-goal mb-3" id="newEvalBtn">New Evaluation</button>
<div class="list-group d-flex">
<div class="goal-eval list-group-item bg-goal">
<p class="evalDate">10/15/2020</p>
<div class="d-flex justify-content-between">
<p class="score border-bottom">3/10</p> <p class="scorePercent border-bottom">30%</p>
</div>
</div>
<div class="goal-eval list-group-item bg-goal">
<p>11/15/20202</p>
<div class="d-flex justify-content-between">
<p class="border-bottom">5/10</p> <p class="border-bottom">50%</p>
</div>
</div>
<div class="goal-eval list-group-item bg-goal">
<p>12/15/2020</p>
<div class="d-flex justify-content-between">
<p class="border-bottom">6/10</p> <p class="border-bottom">60%</p>
</div>
</div>
<div class="goal-eval list-group-item bg-goal">
<p>1/15/2020</p>
<div class="d-flex justify-content-between">
<p class="border-bottom">9/10</p> <p class="border-bottom">90%</p>
</div>
</div>
</div>
</div>
</div>
<div class="goal col-11 col-md-5 card my-3 bg-goal p-0">
<h2 class="p-2">When</h2>
<div class="p-3 bg-white mx-1 mb-1 overflow-auto">
<h3>Goal description:</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<button class="btn bg-goal mb-3" id="newEvalBtn">New Evaluation</button>
<div class="list-group d-flex">
<div class="goal-eval list-group-item bg-goal">
<p class="evalDate">10/25/2020</p>
<div class="d-flex justify-content-between">
<p class="score border-bottom">5/10</p> <p class="scorePercent border-bottom">50%</p>
</div>
</div>
<div class="goal-eval list-group-item bg-goal">
<p>11/25/2020</p>
<div class="d-flex justify-content-between">
<p class="border-bottom">7/10</p> <p class="border-bottom">70%</p>
</div>
</div>
<div class="goal-eval list-group-item bg-goal">
<p>12/25/2020</p>
<div class="d-flex justify-content-between">
<p class="border-bottom">8/10</p> <p class="border-bottom">80%</p>
</div>
</div>
<div class="goal-eval list-group-item bg-goal">
<p>01/25/2020</p>
<div class="d-flex justify-content-between">
<p class="border-bottom">10/10</p> <p class="border-bottom">100%</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句