1

これが私のコードです。for ループが内側と外側の両方で 1 回だけ実行される理由がよくわかりません。警告メッセージを生成するときに適切な値を表示しますnodeList.lengthinnerNodeList.lengthと の両方が 0 を超えて増加しないことがわかりiますj。コードの間違いを指摘してください。

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 に答える