我有一个TB1表,有20行。前2行和后2行是其中的一种标题。现在通过一个AJAX调用,我将新表格作为具有相同结构的html。然后我从该html中删除前2行和后2行,然后将html插入到我的表TB1正好在第2行的上方。代码在我的AJAX调用函数中如下所示:
var op = $(html);//html returned by AJAX call
var tblData = op.find("#myTable > tbody");
var $tblData = $(tblData );
$tblData.find('tr:first').remove();//remove first 2 lines of headers from response
$tblData.find('tr:first').remove();
$tblData.find('tr:last').remove();//remove the last 2 headers rows
$tblData.find('tr:last').remove();
//add data just after the last data row
$("#TB1 tr:nth-last-child(2)").before($tblData .html());
$("#TB1 tr:last").remove(); //sometimes I need remove the last 1 header row on some condition
现在我的表-TB1有20个(旧行)+16个(删除标题后的新行)= 36行。
当我对TB1行进行长度检查时,它给出了36这是正确的。
但是当在JQuery中放入一些选择器来阅读nth-child
或nth-last-child
时,它就无法正常工作。有时它不会返回新添加的行并且不返回任何内容。像nth-child(24)
一样,除了nth-child(26)
将返回第24个数字的行之外什么也不会给我。与nth-last-child
相同。
因此,以某种方式动态添加和删除行会搞乱选择器。
处理这种情况的方法是什么?
答案 0 :(得分:0)
尝试再次找到最后一行。
$("#TB1").find("tr:last").remove()
这完全取决于您在定义变量时所处的表的状态。
可能是你应该使用一个会返回最后一行的函数。
function getLastRowFromTable(talbe){
return $(table).find("tr:last");
}
getLastRowFromTable('#TB1').remove();
这样你就可以获得当前的最后一行。
答案 1 :(得分:0)
你在这里遗漏了很多代码,这很难帮助你,但我可以假设你的问题可以通过在ajax调用上使用.done()函数轻松解决。
所以基本上是这样的:
$.ajax({
//WHATEVER YOUR AJAX CALL DOES TO RETURN THE HTML.
}).done(function(html)){
var op = html;//html returned by AJAX call
var tblData = op.find("#myTable > tbody");
var $tblData = $(tblData );
$tblData.find('tr:first').remove();//remove first 2 lines of headers from response
$tblData.find('tr:first').remove();
$tblData.find('tr:last').remove();//remove the last 2 headers rows
$tblData.find('tr:last').remove();
//add data just after the last data row
$("#TB1 tr:nth-last-child(2)").before($tblData .html());
$("#TB1 tr:last").remove(); //sometimes I need remove the last 1 header row on some condition
});
这应该确保只有在完成ajax函数返回数据后才会执行javascript(这可能是你的问题,因为ajax是异步的,因此你的浏览器不会等到它继续它继续它的假设做c: