Javascript 旧物体去了哪里?
我已经实现了一个对xhtml表进行排序的例程,它基于(或多或少地抄袭自)Nicholas C.Zakas,《面向Web开发人员的专业JavaScript》,第12章。它的工作原理如广告所示,但我对代码的工作原理有一些疑问,如果您能提供建议,我将不胜感激。以下是相关位:Javascript 旧物体去了哪里?,javascript,sorting,Javascript,Sorting,我已经实现了一个对xhtml表进行排序的例程,它基于(或多或少地抄袭自)Nicholas C.Zakas,《面向Web开发人员的专业JavaScript》,第12章。它的工作原理如广告所示,但我对代码的工作原理有一些疑问,如果您能提供建议,我将不胜感激。以下是相关位: var oldTable = document.getElementById('myTable'); var oldTableBody = oldTable.tBodies[0]; var oldTableRows = oldTa
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);
var oldTable=document.getElementById('myTable');
var oldTableBody=oldTable.tBodies[0];
var oldTableRows=oldTableBody.rows;
var newTableArray=新数组();
for(var i=0,rowCount=oldTableRows.length;i
我知道当我将新值推送到newTableArray
上时,我正在向现有表行添加指针,但我不确定appendChild
方法是如何工作的。具体而言:
newFragment
附加到oldTableBody
时,如果我理解正确,我实际上不是将片段作为对象附加,而是将我附加到它的行对象附加,这就是片段的工作方式。对吗newFragment
附加到oldTableBody
时,我不会做任何明确的操作来删除原来在那里的行。他们去了哪里?重新附加它们是否会自动删除它们的任何旧痕迹,因为它们只能附加一次?如果我使用的是指针,而不是对象本身(我认为这是让我将它们附加到newTableArray
而不自动使它们从表中消失的原因),这是否意味着在某些情况下我可以有多个指向同一对象的指针(oldTable
加上newTableArray
)但不是其他(原始表中的原始行加上我正在添加的新排序行)对于这些天真的问题,我深表歉意,但尽管得到了我想要的结果是令人满意的,但不理解代码是如何工作的让我感到不安。我想你所有的问题都归结为问孩子做了什么。它从DOM中删除元素,并将相同的元素放置在新位置
- 进行迭代以将每个表行引用到数组中
- 在数组上进行迭代以将每一行重新定位到文档片段中
- 将片段的内容追加到原始表中
.cloneNode()
方法感兴趣
但是,不能让一个元素出现在DOM中的多个不同位置,从而使一个位置的元素更新反映在其他位置