TypeError: ... [i] не определено

Что не так в этой части скрипта:

        function refreshLabels() {

            // loop through all document elements
            var allnodes = document.body.getElementsByTagName("*");

            for (var i=0, max=allnodes.length; i < max; i++) {
                // get id current elements
                var idname = allnodes[i].id;
                // if id exists, set get id current elements
                if (idname !== '') {
                    allnodes[i].textContent = multilang.get(idname);
                }
            }
        }

Firebug всегда говорит: «TypeError: » для (var i = 0, max = allnodes.length; i <max; i ++) " [i] не определено"

Я не могу найти решение, чтобы исправить это - эта часть неверна?

allnodes

Кстати, также Chrome говорит - так что это не просто проблема FF.

javascript,jquery,

-1

Ответов: 1


1

Ваша проблема с изменением allnodes заключается в том, что вы на самом деле мутируете узловые дочерние узлы textContentмассива и тем самым также изменяете длину allnodesмассива, уменьшая его размер, чтобы цикл продолжал проходить за конец недавно укороченного массива.

Обратитесь к веб-документам MDN для того, что textContentделает:

function refreshLabels() {

  // loop through all document elements
  var allnodes = document.body.getElementsByTagName("*");
  console.log(allnodes.length)

  for (var i = 0, max = allnodes.length; i < max; i++) {
    // get id current elements
    var idname = allnodes[i].id;
    // if id exists, set get id current elements
    if (idname !== '') {
      allnodes[i].textContent = idname;
      console.log(allnodes.length)      // this length will change
    }
  }
}
JavaScript, JQuery,
Похожие вопросы