【问题标题】:Update Options on Existing jQuery Object现有 jQuery 对象的更新选项
【发布时间】:2012-12-19 11:01:09
【问题描述】:

我在我的应用程序中使用 Bootstrap 和 DataTables,并且我有一个基于类的表的默认初始化程序。我可以将类数据表添加到表中,然后使用我想要的默认值对其进行实例化。

我想知道如何根据特定表更改或更新特定选项。

if ($.fn.dataTable) {
    $('.data-table').dataTable( {
        sDom: "R<'row'<'span6'l><'span6'f>r>t<'row'<'span6'i><'span6'p>>",
        sPaginationType: "bootstrap",
        oLanguage: {
            "sLengthMenu": "_MENU_ &nbsp; records per page"
        },
        aoColumnDefs: [
            { "bSortable": false, "aTargets": [ 0 ] }
        ]
    });
}

我所有的数据表在第一列都有一个复选框,因此上述删除排序对所有数据表都有效。但我希望能够逐个表更新aoColumnDefs,这样我就可以添加其他我不想排序的列。

假设我有一个表:$('#member-list'),我如何访问这个对象并在 jQuery 中更新它的数据表选项?我在任何地方都找不到任何参考或帮助。

【问题讨论】:

  • 我看不出这对我有什么帮助。我试过 $('#member-list').fnSettings();但它抛出它没有方法。
  • 如果您在创建数据表时执行var memberList = $("#member-list").dataTable(settingsHere);,然后再执行var settings = memberList.fnSettings(); 是否有效。

标签: jquery twitter-bootstrap jquery-datatables


【解决方案1】:

由于在实例化dataTable 对象时只能配置aoColumnDef,因此我决定采用更优雅的方法并使用数据属性和附加函数来设置可排序的列。

在我的表格中,我添加了 data-sort="0, 4, 8" 或任何我想要排序的特定字段。

然后我创建了一个简单的函数,将数据属性的字符串值转换为数值数组以传递给aTargets:

function convertData (string) {
   $array = Array();
   if (string) {
      $items = string.split(',');
      $.each($items, function () {
         $array.push(parseInt(this, 10));
      });
   }
   return $array;
}

现在我可以简单地遍历每个$('.data-table') 并获取data-sort 属性,将其传递给convertData() 以创建我的数组,然后在创建dataTable 对象时将其传递给aTargets

if ($.fn.dataTable) {
   $('.data-table').each(function() {
      $targets = convertData($(this).data('sort'));
      $(this).dataTable({
         sDom: "R<'row'<'span6'l><'span6'f>r>t<'row'<'span6'i><'span6'p>>",
         sPaginationType: "bootstrap",
         oLanguage: {
            "sLengthMenu": "_MENU_ &nbsp; records per page"
         },
         aoColumnDefs: [
            { "bSortable": false, "aTargets": $targets }
         ]
      });
   });
}

感谢所有试图提供帮助的人:-)

-V

【讨论】:

    【解决方案2】:

    DataTables插件有an alias to access the Settings object,即dataTableSettings。我不知道您尝试更改哪些设置(或者即使它们都可以通过此对象写入),但我已经验证可以更改,例如,nth 列的可排序性与:

    `$('#member-list').dataTableSettings.aoColumns[n].bSortable = true;`
    

    【讨论】:

    • 我可以像这样访问设置对象:$('#member-list').dataTableSettings[0]; 但那里不包含 aoColumnDefs,我认为它仅用于在对象实例化之前应用配置变量。
    • 我更新了一个更具体的例子。但是,通过此 API 工作可能仍无法满足您的需求。我只是对插件不够熟悉,无法为您解答。
    • 也许这可能有效,但要为几十个表执行此操作的代码太多了。我发布的数据属性解决方案更加通用且更易于实现。不过欣赏!! :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多