我已经实现了一个例程来排序基于(=或多或少从)Nicholas C. Zakas,的专业JavaScript for Web Developers,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
方法的工作原理。具体做法是:
当I(指针到原来的行)追加各阵列项到文档片段,我只是增加一个指针(离开行还在原来的表),还是我除去将原始表中的行对象附加到其他位置?
当我追加
newFragment
到oldTableBody
,如果我理解正确的话,我其实没有追加的片段作为对象,但是,我已经追加到该行的对象,而这仅仅是片段的工作方式。那是对的吗?当我将
newFragment
附加到oldTableBody
时,我没有做任何明确的操作来删除最初存在的行。他们去了哪里?是否重新附加它们会自动删除它们的旧痕迹,因为它们只能连接一次?如果我正在使用指针,而不是对象本身(我认为是什么让我将它们附加到newTableArray
而不自动使它们从表中消失),这是否意味着我可以在一些对象中有多个指向同一对象的指针case(oldTable
加newTableArray
)但不是其他人(原始表中的原始行加上我添加的新排序行)?
对于天真的问题抱歉,但尽管我想要的结果令人满意,但不理解代码的工作方式让我感到不安。