我的问题仅与Safari浏览器有关。
我有一个28列的网格。第一列包含名称,而其余27列表示一年中前6个月的一周,每列中有七个小列代表星期几。 每行代表一个人,网格突出显示人们在工作或度假的日子(即假期日历)。
我正在使用jQuery循环遍历网格并计算小列的数量(即星期几),其中包含一个特定的类名,用于标识一个人是否在度假。在网格的底部,我每天追加一个总数,显示有多少人在那一天工作。每个循环在每个人的第一天的列垂直向下循环并将其添加到数组(即[5,0,0,0,0])并在工作日的其他4天重复(即[5, 4,5,5,0]然后移动到下一周的列并重复该过程。这是一个5的数组,因为我不计算周末。我最终得到27个数组。然后我进入另一个循环并且追加每天的数组值,即总数。
function CalculateTotalWorkersPerDay_Name() {
//Count number of month columns which contains the weeks
var tdCount = $(".halfYear .outertr:nth-child(2) td.outer").length;
var sum = 0;
var count;
var toolTipContent;
//iterate based on the amount of date columns
for (count = 0; count < tdCount; count++) {
var totals = [0, 0, 0, 0, 0];
function getTotals() {
var tdNum = count + 2; //represents 2nd child as the first is the name fíeld
//iterate over every direct tr
$(".halfYear tr.outertr").each(function () {
$(this).find(".outer:nth-child(" + tdNum + ") .inner tr td").each(function (j) {
if ($(this).hasClass("std") || $(this).hasClass("other")) {
sum += 1;
totals[j] += 1;
}
});
});
//Insert total values into html
$(".totalRow td.outer:nth-child(" + tdNum + ") td.totalSum").each(function (k) {
toolTipContent = util.tr("Mon: " + totals[0] + "</br>Tues: " + totals[1] + "</br>Wed: " + totals[2] + "</br>Thurs: " + totals[3] + "</br>Fri: " + totals[4],
"Mo: " + totals[0] + "</br>Di: " + totals[1] + "</br>Mi: " + totals[2] + "</br>Do: " + totals[3] + "</br>Fr: " + totals[4], "");
var splitNum = ("" + totals[k]).split("");
if (totals[k] != null) {
if (totals[k].toString().length == 2) {
$(this).append("<span style='display:block;'>" + splitNum[0] + "</span><span>" + splitNum[1] + "</span>");
}
else if (totals[k].toString().length == 3) {
$(this).append("<span style='display:block;'>" + splitNum[0] + "</span><span style='display:block;'>" + splitNum[1] + "</span><span>" + splitNum[2] + "</span>");
}
else {
$(this).append("<span style='display:block;'>" + totals[k] + "</span>");
}
}
$(".totalSumTable" + count + " ").attr("onmouseover", "Tip('" + toolTipContent + "', OFFSETY, 20)");
$(".totalSumTable" + count + " ").attr("onmouseout", "UnTip()");
});
console.log(totals);
}
getTotals(count);
};
}
除了Safari浏览器之外,该方法有效,我不知道为什么。在safari中我仍然得到27个数组,但只有第一个数组(即[0,8,8,8,7])正确显示总数。如果有人可以解释我的代码是否存在问题,或者Safari的问题是否很好,当然,我可以在需要时提供更多信息。我希望我的代码和问题在这一点上足够清楚,因为我真的不知道除了每个循环之外的问题。
由于空间限制,图像中的数字垂直显示(即11为1,低于1)。
更新:如果我在控制台中第二次运行该功能,它会显示正确的数据。当我调试代码时,它也提供了正确的数据。也许它与函数调用时有关。
更新2:在注释“将总值插入html”下方的每个循环中,k变量不递增,这导致只在每个数组中追加第一个索引值总
答案 0 :(得分:0)
问题是我如何为每个功能选择元素。我将其分解并修复了每个循环的迭代。它现在适用于所有浏览器。这个问题的难点在于我在浏览器中调试代码时,它工作正常。
<强> OLD 强>
$(".halfYear tr.outertr").each(function () {
$(this).find(".outer:nth-child(" + tdNum + ") .inner tr td").each(function (j) {
$(this).find(".inner tr td").each(function (j) {
if ($(this).hasClass("std") || $(this).hasClass("other")) {
totals[j] += 1;
}
});
});
<强>已更新强>
$(".halfYear tr.outertr .outer:nth-child(" + tdNum + ")").each(function () {
//added below line
$(this).find(".inner tr td").each(function (j) {
if ($(this).hasClass("std") || $(this).hasClass("other")) {
totals[j] += 1;
}
});
});