Ответ Ибрагима Махрира - более элегантный способ сделать то, что вы пытаетесь сделать, но в интересах помочь вам понять, почему ваше решение не работает, я также публикую это сообщение.
Проблема:
Проблема, с которой вы столкнулись, заключается в том, что когда i = 0, когда вы делаете (i - 1), вы получаете отрицательный показатель, который не является допустимым индексом в вашей таблице.
rows.eq (i - 1) .after (row [j]);
Способ работы вашего решения:
Ниже описано, как вы могли решить эту проблему с помощью существующего кода:
function shuffleRows(parent) {
var rows = parent.children().children(".shuffledtd1");
// Changed to i >= 0.
for (var i = rows.length - 1; i >= 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var temp = rows[i];
// Changed to just i, instead if i-1.
rows.eq(i).after(rows[j]);
rows.eq(j - 1).after(temp);
}
}
$('button').on('click', function() {
shuffleRows($("#parent"));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
<tbody id="parent">
<tr id="node2" class="shufflerow">
<td class="shuffledtd shuffledtd1">AA</td>
<td class="shuffledtd shuffledtd1">BB</td>
<td class="shuffledtd shuffledtd1">CC</td>
</tr>
</tbody>
</table>
<button>Shuffle</button>
Этот фрагмент только что внес два небольших изменения, которые я отметил в коде, чтобы избежать возникшей проблемы с отрицательным индексом.
Опять же,Есть гораздо более элегантные способы решения этой задачи, но я всегда много понимаю, почему что-то не работает, поэтому я хотел, чтобы у вас было объяснение.