我已经实现了一个例程,该例程可以根据Nicholas C. Zakas(为Web开发人员提供的专业JavaScript)(根据(=或多或少地复制自))对xhtml表进行排序。 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
),但在其他情况下则不是(在原始表中的原始行加上我要添加的新的,已排序的行)?为天真问题道歉,但是尽管获得想要的结果令人满意,但不了解代码的工作方式使我感到不安。
最佳答案
我认为您所有的问题都归结为问appendChild
的作用。它将元素从DOM中的位置移除,并将相同的元素放置在新位置。
关于javascript - 旧 object 去了哪里?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6551300/