jQuery每个循环都不会在safari

时间:2017-01-05 09:36:14

标签: jquery safari each

我的问题仅与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)。

Chrome: working

Safari: not working

更新:如果我在控制台中第二次运行该功能,它会显示正确的数据。当我调试代码时,它也提供了正确的数据。也许它与函数调用时有关。

更新2:在注释“将总值插入html”下方的每个循环中,k变量不递增,这导致只在每个数组中追加第一个索引值总

1 个答案:

答案 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;
                }
            });
        });