jQuery Datatables - 从其他页面检索信息

3
我有一个问题,无法从jQuery数据表中获取信息。这是表格: table 我想获取存储在表格中的信息。我已经尝试了以下方法:
var languages=[];
var people=[];

$("select[name='languageID']").each(function(){
    languages.push( $(this).val() );
});

$("input:hidden[name='personID']").each(function(){
    people.push( $(this).val() );
});

但它正在从当前选择的页面获取值。 如果我在像截图中的情况下运行此命令,只有来自第2页的值会被推送到数组中。 我尝试检查第1页的值存储在哪里,但我找不到任何内容。 我也在jQuery datatables主页上寻找了它。
有谁可以帮忙吗?
问候
编辑:
所以我应该这样做:
table.column( 0 ).cache( 'search' ).each( function ( d ) { /*action here*/ } ); 

但是应该执行什么?

当我调试 table.column( 2 ).cache( 'search' );时,我得到了这个结果:

[   choose language ", " choose language ", " choose language ", " choose language ", " choose language ", " choose language " ]

这是“所选语言”中的第一个选项。我认为,我需要一些东西,可以从列中的每个单元格返回HTML代码,以便稍后分析它。

什么版本?该API最近已更改。 - isherwood
4个回答

4
这个问题比想象的要难。一开始,我尝试使用datatable data() API,但它返回的下拉列表是HTML字符串,不是很有用。然后我看到了这篇文章,介绍了datatable如何处理表单输入。关键在于认识到你的datatable对象可以从文档中检索节点,而不受分页的影响。
您可以在我的jsfiddle上找到演示。
编辑:根据与OP的讨论,可以使用以下代码,而不是依赖嵌入式列选择器:
table.$('select[name="languageID"]').each(function(index, value{
    languages.push($(value).val());
});

我已经发布了自己问题的答案,但非常感谢你的帮助 :) - Hladeo
@Hladeo,不要将这些列选择器嵌入到您的代码中,而可以只使用table.$('select').each(function(){}...); - ivan.sim
当我执行 table.$('select[name="languageID"]').each(function(a){ languages.push( a ) }); 时,我得到了所有行的索引: [ 0, 1, 2, 3, 4, 5 ] - Hladeo
1
@Hladeo 请尝试使用 table.$('select[name="languageID"]').each(function(index, value){ languages.push(value)}); 我在 jsfiddle 上测试过了,应该可以工作。 - ivan.sim
1
几乎正确。应该是 languages.push( $(value).val() ) 然后就可以了 :) - Hladeo
你说得对!能给我的回答点个赞吗? :-) - ivan.sim

1
遗留API中,fnGetData应该返回您所需的内容。
$(document).ready(function() {
  oTable = $('#example').dataTable();

  oTable.$('#myButton').click( function () {
    var data = oTable.fnGetData( this );
    // ... do something with the array / object of data for the row
  } );
});

在新的API(v1.10+)中,您可能需要使用column().cache()

http://datatables.net/reference/api/column().cache()


+1 对于 column() 的帮助,但在我的情况下 cache() 不适用。 - Hladeo

1
在我的情况下,我应该修改我的代码为:

var languages=[];
var people=[];

table
  .column(0)
  .nodes()
  .each(function(a){
    people.push( $(a).find("input:hidden[name='personID']").val() );
});

table
  .column(2)
  .nodes()
  .each(function(a){
    languages.push( $(a).find("select[name='languageID']").val() );
});  

0
如 @ivan.sim 所说,虽然不容易获取完整的表格数据,但我最终找到了一个解决方案(参见此处链接),可以用来获取完整表格中包括未显示页面在内的值(包括隐藏输入等)。
table.rows().every(function (rowIdx, tableLoop, rowLoop) {
    var data = this.node();
    console.log($(data).find('input').prop('checked'));
    console.log($(data).find('input[name=someField]').val());
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接