JQUERY将行添加到表中

JQUERY将行添加到表中,jquery,Jquery,我知道如何在表中添加行。 但是在这个给定的网站上 var compare={//声明比较对象 名称:函数(a,b){//添加一个名为name的方法 a=a.replace(/^the/i',);//从参数的开头删除 b=b.replace(//^i',);//从参数的开头删除 如果(ab?1:0;//如果a大于b,则返回1或 }//如果它们相同,则返回0 }, duration:函数(a,b){//添加一个名为duration的方法 a=a.split(“:”);//在冒号处拆分时间 b=b.

我知道如何在表中添加行。 但是在这个给定的网站上

var compare={//声明比较对象
名称:函数(a,b){//添加一个名为name的方法
a=a.replace(/^the/i',);//从参数的开头删除
b=b.replace(//^i',);//从参数的开头删除
如果(ab?1:0;//如果a大于b,则返回1或
}//如果它们相同,则返回0
},
duration:函数(a,b){//添加一个名为duration的方法
a=a.split(“:”);//在冒号处拆分时间
b=b.split(“:”);//在冒号处拆分时间
a=数字(a[0])*60+数字(a[1]);//将时间转换为秒
b=数字(b[0])*60+数字(b[1]);//将时间转换为秒
返回a-b;//返回a减去b
},
date:函数(a,b){//添加一个名为date的方法
a=新日期(a);//保存日期的新日期对象
b=新日期(b);//保存日期的新日期对象
返回a-b;//返回a减去b
}
};
$('.sortable')。每个(函数(){
var$table=$(this);//此可排序表
var$tbody=$table.find('tbody');//存储表体
var$controls=$table.find('th');//存储表头
var rows=$tbody.find('tr').toArray();//存储包含行的数组
$controls.on('click',function(){//当用户单击标题时
var$header=$(this);//获取头
var order=$header.data('sort');//获取数据排序属性的值
var column;//声明名为column的变量
//如果所选项目具有升序或降序类,则反转内容
如果($header.is('.ascending')| |$header.is('.discending')){
$header.toggleClass(“升序-降序”);//切换到其他类
$tbody.append(rows.reverse());//反转数组
}else{//否则执行排序
$header.addClass('升序');//将类添加到header
//从所有其他收割台上删除asc或desc
$header.sides().removeClass('升序-降序');
if(compare.hasOwnProperty(order)){//if比较对象有方法
column=$controls.index(this);//搜索列的索引号
sort(函数(a,b){//调用rows数组上的sort()
a=$(a.find('td').eq(column.text();//获取a行中列的文本
b=$(b).find('td').eq(column.text();//获取b行中列的文本
返回compare[order](a,b);//调用compare方法
});
$tbody.append(行);
}
}
});

});无法将这些行添加到表中,因为表中已添加了这些行

首先,rows变量将把引用(而不是复制值)存储到已经添加到表中的tr节点数组中。这里的append函数没有按预期工作,因为它已检查了已经是tbody子级的行。因此,您需要将行克隆到新对象,如下所示:

 var rows = $tbody.find('tr').clone().toArray(); 
而不是

 var rows = $tbody.find('tr').toArray();

好的,所以同一个引用不能被添加到表中两次,但是,如果我们复制了一个引用,那么我们可以将相同的内容添加到表中?没错。DOM不关心表的内容,它只检查节点(在本例中是tr节点),并且不能将作为父节点的子节点的相同节点再次添加到父节点。