jQuery中最后一行向表中添加额外行的最佳方法是什么?
这可以接受吗?
$('#myTable').append(''); my data more data
您可以添加到这样的表(例如输入,选择,行数)的限制是什么?
你建议的方法不能保证给你你想要的结果 - 如果你有一个tbody
例子:
你最终会得到以下结果:
因此我建议采用这种方法:
$('#myTable tr:last').after('... ... ');
您可以在after()
方法中包含任何内容,只要它是有效的HTML,包括上面示例中的多行.
更新:在此问题的最近活动之后重新回答此答案.eyelidless是一个很好的评论,tbody
在DOM中总会有一个; 这是事实,但只有至少有一行.如果没有行,tbody
除非您自己指定了行,否则将没有行.
DaRKoN_ 建议追加到tbody
而不是添加在最后一个内容tr
.这解决了没有行的问题,但仍然没有防弹,因为理论上你可以有多个tbody
元素,并且行将被添加到每个元素中.
权衡一切,我不确定是否有单一的单线解决方案可以解决每一种可能的情况.您需要确保jQuery代码与您的标记一致.
我认为最安全的解决方案可能是确保您的标记table
中至少包含一个tbody
,即使它没有行.在此基础上,您可以使用以下工作,但是您可以使用多行(并且还可以考虑多个tbody
元素):
$('#myTable > tbody:last-child').append('... ... ');
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 data more 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('... ... ');在
first
和last
第一个或最后一个标记关键字工作启动,没有关闭.因此,如果您不希望更改嵌套表,而是添加到整个表中,则嵌套表会更好.至少,这是我发现的.
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 = ''+ ' '; //Add row table.append(row.compose({ 'id': 3, 'name': 'Lee', 'phone': '123 456 789' }));{{id}} '+ '{{name}} '+ '{{phone}} '+ '这是演示 小提琴
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 data1 your data2 your data3 推荐阅读
如何解决《html5-如何折叠和扩展复杂的表元素》经验,为你挑选了0个好方法。 ... [详细] 如何解决《如何忽略以不同高度创建的边距内联块?》经验,为你挑选了0个好方法。 ... [详细] 如何解决《使每一秒div都有不同的背景颜色》经验,为你挑选了1个好方法。 ... [详细] 如何解决《AndroidStudio2.0(预览3b)布局xml更改未在apk中更新?》经验,为你挑选了0个好方法。 ... [详细] 如何解决《每个钩子错误之前的角度业力幻像》经验,为你挑选了0个好方法。 ... [详细] 如何解决《是什么导致我的循环只在第一次迭代中忽略这个"\t"?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《通过蓝牙或USB与打印机设备通信并进行控制》经验,为你挑选了0个好方法。 ... [详细] 如何解决《如何在psycopg2中返回列表而不是元组》经验,为你挑选了1个好方法。 ... [详细] 如何解决《字符串数到整数不工作的PHP》经验,为你挑选了1个好方法。 ... [详细] 如何解决《使用问题与rails中的模块有什么区别?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《(转到)如何使用toml文件?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《关于SwaggerAPI的建议》经验,为你挑选了1个好方法。 ... [详细] 如何解决《单元测试SpringCloudService的策略》经验,为你挑选了1个好方法。 ... [详细] 如何解决《密码管理:html中的硬编码密码》经验,为你挑选了1个好方法。 ... [详细] 如何解决《在Eclipse中从MongoDB禁用控制台日志记录》经验,为你挑选了1个好方法。 ... [详细] 如何解决《特定角色的strsplit,证明该角色不应该被特定角色所遵循》经验,为你挑选了1个好方法。 ... [详细] 如何解决《Bootstrap模态动态宽度》经验,为你挑选了2个好方法。 ... [详细] 如何解决《AndroidWebView键盘在android中隐藏片段中的输入字段》经验,为你挑选了0个好方法。 ... [详细] 如何解决《django每周每月一次的方式对查询元素进行排序》经验,为你挑选了1个好方法。 ... [详细] 如何解决《针对多个Java版本进行测试的最佳方法》经验,为你挑选了1个好方法。 ... [详细]吐了个 "CAO" !Tags | 热门标签RankList | 热门文章
- 1Spark:为每个节点创建多个执行程序的优势是什么?
- 2如何在C中连续唤醒并暂停500ms
- 3用于连字符的正则表达式
- 4ffmpeg退出代码1:配置复杂过滤器时出错
- 5MongoDB并发问题
- 6如何设置Azure身份验证自定义登录返回URL?
- 7在ViewController和ContainerViewController之间传递数据
- 8ES6 Promises - 在promise链中调用同步函数
- 9在运行时删除所有领域对象
- 10有没有办法在Windows cli中使用'COPY'命令(PostgreSQL)?
- 11QuickBlox v2.6 x通过Facebook for iOS登录
- 12将R数据作为输入传递给html?
- 13无法在Django 1.9+中解析'django.utils.log.NullHandler'
- 14是否在Ruby中的BigDecimal中使用String或Integer
- 15SQL BETWEEN命令不适用于大范围
- 16Ruby - 如何从嵌套在哈希中的数组访问键
- 17如何理解React Native中"向Javascript发送事件"中的"ReactContext"
- 18使用Require JS的angularJS App中的子资源完整性
- 19如何支持使用UILabel自动调整UITableViewCell的大小
- 20如何在android studio中添加卫星视图?
DevBox开发工具箱 | 专业的在线开发工具网站 京公网安备 11010802040832号 | 京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有