Я реализовал подпрограмму для сортировки таблицы xhtml на месте, которая основана (= более или менее скопирована из) Николаса С. Закаса, Профессиональный JavaScript для веб-разработчиков , Ch.12. Он работает как рекламируется, но у меня есть несколько вопросов о том, как работает код, и буду благодарен за совет.Вот соответствующие биты:
var oldTable = document.getElementById('myTable');
var oldTableBody = oldTable.tBodies[0];
var oldTableRows = oldTableBody.rows;
var newTableArray = new Array();
for (var i = 0, rowCount = oldTableRows.length; i < rowCount; i++) {
newTableArray.push(oldTableRows[i]);
}
newTableArray.sort(chooseSort);
var newFragment = document.createDocumentFragment();
for (var i = 0, rowCount = newTableArray.length; i < rowCount; i++) {
newFragment.appendChild(newTableArray[i]);
}
oldTableBody.appendChild(newFragment);
Я понимаю, что я добавляю указатели к существующим строкам таблицы, когда я помещаю новые значения в newTableArray
, но я не уверен, как методы appendChild
Работа.В частности:
Когда я добавляю каждый из элементов массива (указатели на исходные строки) к фрагменту документа, я просто добавляю указатель (оставляя строку в исходной таблице)или я удаляю объект строки из исходной таблицы, добавляя его куда-то еще?
Когда я добавляю newFragment
к oldTableBody
, если я правильно понимаю, я на самом деледобавляя не фрагмент как объект, а объекты строк, которые я добавил к нему, и именно так работают фрагменты.Это правильно?
Когда я добавляю newFragment
к oldTableBody
, я ничего не делаю, чтобы удалить строки, которые были там изначально.Куда они делись?Удаляет ли добавление их заново автоматически их старые следы, потому что они могут быть прикреплены только один раз?Если я работаю с указателями, а не с самими объектами (что, как я думал, позволило мне прикрепить их к newTableArray
, не заставляя их автоматически исчезать из таблицы), означает ли это, что я могу иметь несколько указателей на один и тот же объект?в некоторых случаях (oldTable
плюс newTableArray
), но не в других (исходные строки в исходной таблице плюс новые отсортированные строки, которые я добавляю)?
Извинения занаивные вопросы, но хотя получение результатов, которые я хочу, приносит удовлетворение, непонимание того, как работает код, вызывает у меня беспокойство.