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 推荐阅读
如何解决《秒表应用程序计数器走得太快》经验,为你挑选了1个好方法。 ... [详细] 如何解决《在MSTest中如何在TestCleanup中访问TestMethod异常而不在测试方法中使用try/catch块》经验,为你挑选了0个好方法。 ... [详细] 如何解决《Angular2引导函数给出错误"参数类型AppComponent不可分配给参数类型类型"》经验,为你挑选了4个好方法。 ... [详细] 如何解决《使用python输入重定向》经验,为你挑选了1个好方法。 ... [详细] 如何解决《为什么"transform-es2015-modules-commonjs"在Babel6中添加"usestrict"?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《无法使用键盘在Chrome中选择满意的文字》经验,为你挑选了0个好方法。 ... [详细] 如何解决《如何设置我的VS2013TypeScript项目来编译我的打字稿文件但排除我的node_modules?》经验,为你挑选了0个好方法。 ... [详细] 如何解决《SpringBoot@ControllerAdvice异常处理程序没有触发》经验,为你挑选了0个好方法。 ... [详细] 如何解决《PythonPIL-寻找最近的颜色(圆角颜色)》经验,为你挑选了1个好方法。 ... [详细] 如何解决《与visualstudio一起使用angular2》经验,为你挑选了1个好方法。 ... [详细] 如何解决《是否必须在多线程环境中为long类型实例常量声明volatile?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《如何使用rxandroid来监听gps位置更新》经验,为你挑选了1个好方法。 ... [详细] 如何解决《逻辑错误,在TicTacToe中检查获胜者》经验,为你挑选了0个好方法。 ... [详细] 如何解决《逐行打印python列表中的列表》经验,为你挑选了1个好方法。 ... [详细] 如何解决《在GameScene中显示UIAlertController(SpriteKit/Swift)》经验,为你挑选了1个好方法。 ... [详细] 如何解决《在Aurelia中将自定义元素替换为模板本身(而不是将其包含在自定义元素中)?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《SpringBoot@autowired不起作用,类在不同的包中》经验,为你挑选了1个好方法。 ... [详细] 如何解决《如何在C++中实现指向成员函数的指针?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《Java得到一个double的前2个十进制数字》经验,为你挑选了1个好方法。 ... [详细] 如何解决《为什么jquery-ajax多次提交表单?》经验,为你挑选了2个好方法。 ... [详细]吐了个 "CAO" !Tags | 热门标签RankList | 热门文章
- 1错误消息"潜在危险的Request.Form值"
- 2Angularjs soap库在Firefox上抛出typeError,而不是在Chrome中抛出
- 3新的Task总是在ThreadPool线程上执行吗?
- 4在bash脚本中向git提供密码
- 5如何计算具有rowspan属性的表行
- 6R:调整ggplot2中的缩放颜色渐变
- 7为什么不string :: data()提供一个Mutable char*?
- 8UWP中的DataTable类在哪里?
- 9MongoDB Java驱动程序:MongoCore驱动程序与MongoDB驱动程序与MongoDB异步驱动程序
- 10在Swift 2.0中将新项目追加到类的数组中
- 11如何获得2个字符之间的值
- 12为什么Akka.Net F#API定义了actorOf2而不是actorOf3,actorOf4等?
- 13Visual Studio无法打开cshtml文件
- 14有条件地在perl中包含一个模块
- 15LISP - 将带有数组表示的字符串转换为数组
- 16在Sublime Text中自动完成自定义JavaScript函数
- 17如何在CollapsingToolbarLayout和Toolbar的中心放置文本?
- 18VBA将单页保存为CSV(不是整个工作簿)
- 19如何有效地将Matlab引擎数组转换为numpy ndarray?
- 20尝试运行Qt应用程序时LD_LIBRARY_PATH失败
DevBox开发工具箱 | 专业的在线开发工具网站 京公网安备 11010802040832号 | 京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有