Отредактированный ответ:
Нет rows[i+1]
, когда вы i
- это индекс последнего элемента строки.Ваша проблема в том, что в приведенной выше части кода i
- это значение, которое i
имело после цикла for
, которое является первым значением, при котором проверка цикла i < (rows.length-1)
не прошла.Поэтому в этой точке кода у вас всегда должен быть i === (rows.length-1)
, а это не то, что вам нужно.
Способ избежать этой проблемы - использовать переменную цикла вне цикла (который редкоцель, которую всегда трудно читать / понимать / отлаживать и т. д.), состоит в том, чтобы написать свои циклы с let
вместо var
, если вы не возражаете против поддержки старых браузеров:
for (let i = 1; i < (rows.length-1); i++) {
Таким образом,i
не будет определен вне вашего цикла, и у вас будет легкая для понимания ошибка, сообщающая вам об этом, если вы попытаетесь использовать i
далее в своем коде в месте, где он не работает.ничего не значит.
Однако в коде есть и другие ошибки.В частности, вы никогда не выходите из цикла while
.Надеюсь, вы сами сможете это понять, теперь, когда знаете, как исправить возникшую ошибку.Но если бы мне пришлось сортировать таблицу с использованием простого JavaScript, я бы, вероятно:
- получил список всех строк в моей таблице,
- отсортировал их, используя сборку-в функции сортировки с хорошо выбранной функцией сравнения,
- Удалите все строки из DOM с помощью remove ,
- Добавьте их обратно в правильном порядкеиспользование appendChild в цикле
for
над отсортированным массивом.
Это было бы намного легче читать и отлаживать.Написание собственной функции сортировки - хорошее упражнение, но если ваша цель - это веб-функциональность, а не практиковать алгоритмику, не делайте этого.