面板未添加到列中

时间:2015-06-01 11:41:41

标签: javascript

我想要实现的是将一个面板分配给其中面板数量最少的列,如果其中两个面板具有相同数量的面板,那么我将第一列插入并插入那里。我试图实现这一点,我将在下面展示,但我想首先解决我遇到的问题。我知道我的代码可能有很多缺陷,所以我愿意接受如何让它变得更好的建议。所以我通过firebug得到的错误是

TypeError: columns[leastItems] is undefined


return columns[leastItems].id;

这是我实施的javascript代码:

    function DashboardAllocation() {
    var columns = document.querySelectorAll('.col-md-4.column');
    var noElemsInCol = new Array(columns.length);


    //Get count of children in each column into array
    for (var columnNumber = 0; columnNumber < columns.length; columnNumber++) {
        noElemsInCol.push(countChildren(columns[columnNumber]));
    }

    //Compare all values to see if they are all the same or if the first column is 0
    if (compareAllValues(noElemsInCol) || countChildren(columns[0] === 0)) {
        //if it is then return the first columns id
        return columns[0].id;
    }


    //Reference http://www.programmingsimplified.com/c/source-code/c-program-find-minimum-element-in-array
    var leastItems = 1;
    var minimum = countChildren(columns[0]);;

    for (var i = 1; i < noElemsInCol.length; i++) {
        if (noElemsInCol[i] < minimum) {
            minimum = noElemsInCol[i];
            leastItems = i + 1;
        }
    }

    return columns[leastItems].id;
}

//Compares all the values in the array to check if they are equal
//Reference http://stackoverflow.com/questions/9973323/javascript-compare-3-values
function compareAllValues(a) {
    for (var i = 0; i < a.length; i++) {
        if (a[i] === null) { return false }

        for (var j = 0; j < i; j++) {
            if (a[j] !== a[i]) { return false }
        }
    }

    return true;
}

function countChildren(Nodes) {
    var childrenCount = 0;
    for (var nodeType in Nodes.childNodes) {
        //if the nodetype is an element then we will add one
        if (nodeType == Node.ELEMENT_NODE) {
            childrenCount++;
        }
    }

    return childrenCount;
}

我已经引用了我从中获取代码的来源,并希望有助于了解我的来源并了解我要做的事情

1 个答案:

答案 0 :(得分:1)

由于数组leastItems的索引columns超出范围,您遇到问题。

目前,您正在尝试使用[5]变量

获取第六个元素的leastItems数组中出现错误

所以要么使用改变

var leastItems = 0;

或,使用

return columns[leastItems -1 ].id;