当前位置:  开发笔记 > 编程语言 > 正文

在jQuery中添加表行

如何解决《在jQuery中添加表行》经验,为你挑选了29个好方法。

jQuery中最后一行向表中添加额外行的最佳方法是什么?

这可以接受吗?

$('#myTable').append('my datamore data');

您可以添加到这样的表(例如输入,选择,行数)的限制是什么?



1> Luke Bennett..:

你建议的方法不能保证给你你想要的结果 - 如果你有一个tbody例子:

......

你最终会得到以下结果:

.........

因此我建议采用这种方法:

$('#myTable tr:last').after('......');

您可以在after()方法中包含任何内容,只要它是有效的HTML,包括上面示例中的多行.

更新:在此问题的最近活动之后重新回答此答案.eyelidless是一个很好的评论,tbody在DOM中总会有一个; 这是事实,但只有至少有一行.如果没有行,tbody除非您自己指定了行,否则将没有行.

DaRKoN_ 建议追加到tbody而不是添加在最后一个内容tr.这解决了没有行的问题,但仍然没有防弹,因为理论上你可以有多个tbody元素,并且行将被添加到每个元素中.

权衡一切,我不确定是否有单一的单线解决方案可以解决每一种可能的情况.您需要确保jQuery代码与您的标记一致.

我认为最安全的解决方案可能是确保您的标记table中至少包含一个tbody,即使它没有行.在此基础上,您可以使用以下工作,但是您可以使用多行(并且还可以考虑多个tbody元素):

$('#myTable > tbody:last-child').append('......');


如果表中没有行,这是否有效?
DOM中总会有一个tbody.
对其他优秀解决方案的一个小改进是优化选择器.您可以通过以下方式获得速度提升:`$('#myTable').find('tbody:last')`而不是`$('#myTable> tbody:last')`.
@Rama,不,不会.需要一个更好的解决方案.
一个空的tbody不会验证你的HTML
"eyelidless是一个很好的评论,在DOM中总会有一个tbody" - 我只是在没有tbody的情况下尝试了它并且它不起作用 - 它只有在有一个tbody时才有效.
认为最好的(不是速度,并且有优化空间)将是:var tbl = $("#myTable"); if(tbl.find("tbody:last").length){tbl = tbl.find("tbody:last"); } tbl.append(" ... ... ");

2> Neil..:

jQuery有一个内置的工具来动态操作DOM元素.

您可以像这样向表中添加任何内容:

$("#tableID").find('tbody')
    .append($('')
        .append($('')
            .append($('')
                .attr('src', 'img.png')
                .text('Image cell')
            )
        )
    );

$('')jQuery中的东西是一个标记对象,它可以有几个attr可以设置和获取的属性,以及text代表这里标记之间的文本:text.

这是一些非常奇怪的缩进,但是你更容易看到这个例子中发生了什么.


对于那些正在尝试此操作的人,请仔细注意括号的位置.适当的嵌套至关重要.
结束标签怎么样?他们没必要吗?
$("#tableClassname")实际上不应该是$("#tableID"),因为哈希符号是指ID而不是类名?
我讨厌这种奇怪的链接.保持代码充满了这些东西是一场噩梦.
@senfo添加**child**元素将自动创建.
运行多个append()与单个append()的性能使得这样做效率低下.在大多数情况下,您最好先构建整个HTML字符串,然后将其附加到1个镜头中.这是一个JS perf测试来比较http://jsperf.com/single-vs-multiple-jquery-append/4(警告它实际上足以让某些浏览器崩溃)

3> Salman von A..:

所以自从@Luke Bennett回答这个问题后,事情发生了变化.这是一个更新.

jQuery的自1.4版本(?)会自动检测,如果你试图要插入的元素(使用任意的append(),prepend(),before(),或after()方法)是一个,并将其插入第一个在你的表或它包装成一个新的,如果一个不存在.

所以是的,您的示例代码是可以接受的,并且可以与jQuery 1.4+一起使用.;)

$('#myTable').append('my datamore data');


对此假设要小心。如果您附加的标记以\ n或\ n \ r开头,则jQuery不会检测到它是<tr>并将其附加到<table>而不是<tbody>。我刚刚遇到了MVC视图生成的标记,该标记在开始时有多余的一行。

4> ChadT..:

如果你有一个和一个怎么办?

如:

Foo
footer information

然后它会在页脚中插入新行 - 而不是身体.

因此,最好的解决方案是包含标签和使用.append,而不是.after.

$("#myTable > tbody").append("row content");


你错误地实施了你的tfoot.它应该出现在tbody之前,而不是之后 - 请参阅http://www.w3.org/TR/html4/struct/tables.html#h-11.2.3.因此,除非您选择违反标准,否则我的解决方案仍然有效(在这种情况下,您可以预期其他事情也会出错).无论你是否有人,我的解决方案也有效,而如果没有tbody你的建议会失败.
尽管中有任何错误,但这是一个更好的解决方案.如果没有,您可以在本身使用相同的技术.鉴于"已接受的答案"需要额外检查以查看是否存在现有行.(我知道OP没有指明这个要求,但没关系 - 这篇文章在谷歌搜索这项技术时排在第一位,最好的答案不是顶级.)
这是一个比查找更好的解决方案.在几次迭代中,这种技术似乎始终有效.作为添加的FYI,您可以使用.prepend将行添加到表的开头,而.append将行放在表的末尾.

5> shashwat..:

我知道你已经要求使用jQuery方法了.我看了很多,发现我们可以通过以下函数直接使用JavaScript来更好地完成它.

tableObject.insertRow(index)

index是一个整数,指定要插入的行的位置(从0开始).也可以使用-1的值; 这导致新行将插入最后一个位置.

此参数在Firefox和Opera中是必需的,但在Internet Explorer,Chrome和Safari中是可选的.

如果省略此参数,则insertRow()在Internet Explorer的最后一个位置以及Chrome和Safari中的第一个位置插入一个新行.

它适用于HTML表的每个可接受的结构.

以下示例将在last中插入一行(-1用作索引):


    
        
    

           
        
cell 1 cell 2
cell 3 cell 4

我希望它有所帮助.


这个方法的问题(正如我刚才发现的)是,如果你有一个页脚,它将在页脚后面添加-1作为索引.

6> Curtor..:

我建议

$('#myTable > tbody:first').append('......'); 

而不是

$('#myTable > tbody:last').append('......'); 

firstlast第一个或最后一个标记关键字工作启动,没有关闭.因此,如果您不希望更改嵌套表,而是添加到整个表中,则嵌套表会更好.至少,这是我发现的.



7> sulest..:

在我看来,最快捷,最明确的方式是

//Try to get tbody first with jquery children. works faster!
var tbody = $('#myTable').children('tbody');

//Then if no tbody just select your table 
var table = tbody.length ? tbody : $('#myTable');

//Add row
table.append('hello>');

这里是演示 小提琴

此外,我可以推荐一个小函数来进行更多的html更改

//Compose template string
String.prototype.compose = (function (){
var re = /\{{(.+?)\}}/g;
return function (o){
        return this.replace(re, function (_, k){
            return typeof o[k] != 'undefined' ? o[k] : '';
        });
    }
}());

如果您使用我的字符串编辑器,您可以这样做

var tbody = $('#myTable').children('tbody');
var table = tbody.length ? tbody : $('#myTable');
var row = ''+
    '{{id}}'+
    '{{name}}'+
    '{{phone}}'+
'';


//Add row
table.append(row.compose({
    'id': 3,
    'name': 'Lee',
    'phone': '123 456 789'
}));

这是演示 小提琴



8> Nischal..:

这可以使用jQuery的"last()"函数轻松完成.

$("#tableId").last().append("New row");


好主意,但我认为您现在想要将选择器更改为#tableId tr,因为您现在可以在表格下方添加行.

9> 小智..:

当表中没有任何行时,我正在使用这种方式,并且每行都非常复杂.

style.css中:

...
#templateRow {
  display:none;
}
...

xxx.html

...
 ... 
...

$("#templateRow").clone().removeAttr("id").appendTo( $("#templateRow").parent() );

...



10> 小智..:

对于此处发布的最佳解决方案,如果最后一行有嵌套表,则新行将添加到嵌套表而不是主表.一个快速的解决方案(考虑带有/不带tbody的表和带有嵌套表的表):

function add_new_row(table, rowcontent) {
    if ($(table).length > 0) {
        if ($(table + ' > tbody').length == 0) $(table).append('');
        ($(table + ' > tr').length > 0) ? $(table).children('tbody:last').children('tr:last').append(rowcontent): $(table).children('tbody:last').append(rowcontent);
    }
}

用法示例:

add_new_row('#myTable','my new row');



11> Anton vBR..:

我这样解决了.

使用jquery

$('#tab').append($('')
    .append($('').append("text1"))
    .append($('').append("text2"))
    .append($('').append("text3"))
    .append($('').append("text4"))
  )

片段

$('#tab').append($('')
  .append($('').append("text1"))
  .append($('').append("text2"))
  .append($('').append("text3"))
  .append($('').append("text4"))
)

在哪个示例a b行中插入行1 2,而不是3 4在第二个示例之后插入.如果表是空的,jQuery会TBODY为新行创建.



28> Praveena M..:

如果您正在使用Datatable JQuery插件,您可以尝试.

oTable = $('#tblStateFeesSetup').dataTable({
            "bScrollCollapse": true,
            "bJQueryUI": true,
            ...
            ...
            //Custom Initializations.
            });

//Data Row Template of the table.
var dataRowTemplate = {};
dataRowTemplate.InvoiceID = '';
dataRowTemplate.InvoiceDate = '';
dataRowTemplate.IsOverRide = false;
dataRowTemplate.AmountOfInvoice = '';
dataRowTemplate.DateReceived = '';
dataRowTemplate.AmountReceived = '';
dataRowTemplate.CheckNumber = '';

//Add dataRow to the table.
oTable.fnAddData(dataRowTemplate);

请参阅Datatables fnAddData Datatables API



29> vipul sorath..:

以一种简单的方式:

$('#yourTableId').append('your data1your data2your data3');

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有