1

这是我的代码。我不太明白为什么 for 循环只运行一次,内部和外部。nodeList.lengthinnerNodeList.length在我生成警报消息时显示适当的值。我看到两者ij不会超过 0。请指出代码有任何问题。

function getCategoryElements() {
var newCategoryDiv = document.getElementById("category");
var nodeList = newCategoryDiv.childNodes;

for (var i = 0; i < nodeList.length; ++i) {
    var innerNodeList = nodeList[i].childNodes;
    alert("innerNodeList Length" + innerNodeList.length.toString());

    for (var j = 0; j < innerNodeList.length; ++j) {
        if (innerNodeList[j].nodeName == "SELECT") {
            alert("inside select Node value " + innerNodeList[j].nodeValue.toString());
            document.getElementById("newCategories").value = 
                document.getElementById("newCategories").value + '<%=delimiter%>' + innerNodeList[j].nodeValue;
        } else if (innerNodeList[j].nodeName == "TEXTAREA") {
            document.getElementById("newCategoriesData").value =
                document.getElementById("newCategoriesData").value + '<%=delimiter%>' + innerNodeList[j].nodeValue;
        }
    }
  }
}
4

1 回答 1

1
var newCategoryDiv, nodeList, innerNodeList, innerNode, i, j;

newCategoryDiv = document.getElementById("category");
nodeList = newCategoryDiv.childNodes;

for (i = 0; i < nodeList.length; ++i) {
    innerNodeList = nodeList[i].childNodes;
    alert("innerNodeList Length" + innerNodeList.length.toString());

    for (j = 0; j < innerNodeList.length; ++j) {
        innerNode = innerNodeList[j];
        if (innerNode.nodeName === "SELECT") {
            alert("inside select Node value " + innerNode.nodeValue.toString());
            document.getElementById("newCategories").value += '<%=delimiter%>' + innerNode.nodeValue;
        } else if (innerNode.nodeName === "TEXTAREA") {
            document.getElementById("newCategoriesData").value += '<%=delimiter%>' + innerNode.nodeValue;
        }
        // Will this work?
        alert('Does this alert appear'); 
    }
}

我冒昧地重构了您的代码并对其进行了一些清理。如果您不知道,所有变量在 Javascript 中都具有函数作用域,因此无论您在单个函数中的何处声明它们,Javascript 都将它们视为变量声明是第一个语句。

看来您的代码在语法上是正确的,因此我认为寻找问题的最合乎逻辑的地方是在最后一次alert函数调用之后可能会发生错误。

为了检查这一点,请尝试alert在内部循环的末尾添加另一个函数调用。如果它没有运行,你就会知道是这种情况。

于 2013-10-18T19:25:54.360 回答