1

完了/終了していないネストされた for ループがあります。2 番目のループでスタックしています。

for (var j = 0; next.className != "rfccs" && next !== null; j++)

「次」がnullの場合にのみスタックします。

私のコード:

var filtertypes = document.getElementsByClassName("rfccs"); // filtertypes is an array of all filter type headers
var next = null; // placeholder for the next sibling element
var tout = document.getElementById("testout"); //test
tout.innerHTML = "init "; //test

for (var i = 0; i < filtertypes.length; i++) {
    filtertypes[i].className += " fhead" + i; // adds a unique class to every filter type header div
    var filtertype = filtertypes[i]; // sets filtertype to the current filter type header
    next = filtertype.nextElementSibling; // gets the next sibling

    for (var j = 0; next.className != "rfccs" && next !== null; j++) { // adds the same class name to all filters in the same filter type
        next.className += " ftype" + i;
        next.innerHTML += i;
        next = next.nextElementSibling;
        tout.innerHTML += "i = " + i + "; j = " + j + "///";
        if (next == null) {
            tout.innerHTML += "DONE";
        }
    }
    tout.innerHTML += "~~~~";
}

トレース/デバッグ コードが非常に面倒であることはわかっています。

ここにフィドルがあります

4

2 に答える 2

1
var next = null;
next.className; // TypeError: Cannot read property 'className' of null

nullチェックする前にチェックしてください.className

next !== null && next.className !== "rfccs" // false if null

さらに、すべてのHTMLElementは論理演算子によって true になるため!== null、完全にスキップできます。

next && next.className !== "rfccs" // falsy if `next` falsy
于 2013-05-06T18:17:27.557 に答える
0

The solution is

for (var j = 0; next != null && next.className != "rfccs"; j++)

if next is null next.className will fail and hence javascript loop

see if this is what you expect http://jsfiddle.net/wJBJL/6/

于 2013-05-06T18:19:05.337 に答える