【问题标题】:DataTables - How can I use my own buttons for exporting?DataTables - 我如何使用自己的按钮进行导出?
【发布时间】:2016-10-02 09:29:15
【问题描述】:

我使用 Materialize 作为我的 UI 框架,我使用 DataTables 作为我的表。我有一个需要导出到 excel 的表,我可以使用 DataTables 按钮完成它。但是,它们是默认的 DataTables 按钮,我想使用 Materialize 按钮。

那么问题来了:如何使用自己的按钮,并让它们完成DataTables内置按钮的功能(特别是导出到Excel)?

我已经尝试在 Materialise 按钮​​类中使用“className”选项,但是没有用。我想我可能需要做一些 JQuery 函数。

谢谢大家!

编辑:这是我的代码:

$(document).ready(function() {
var dataTable = $('#datatable').DataTable( {
    language: {
        search: "",
        searchPlaceholder: "Search"
    },
    dom: 'Brftip',
    buttons: [
        'copy',
        'csv',
        'excel',
        'pdf',
        'print'
    ]
} );

【问题讨论】:

  • 请出示您的代码!
  • @CMedina 谢谢。这是非常标准的 DataTables 代码。检查我的主要帖子上的编辑。

标签: javascript jquery excel datatables materialize


【解决方案1】:

https://datatables.net/extensions/buttons/custom

buttons: [
    {
        text: 'Reload',
        action: function ( e, dt, node, config ) {
                dt.ajax.reload();
            }
        }
    ]

“text”可以是自定义按钮的html

【讨论】:

  • 您提供了自定义按钮的代码。但是 OP 想要以不同的方式设置现有按钮的样式。
  • 你说得对,我应该更具体:对我来说,按钮是一些 html 和点击操作。所以我建议创建一个具有所需方面的新按钮,而不是修改原始按钮。这可以翻译成:buttons: [ { extend: 'csvHtml5', text: "
    " } ]
  • 我认为这也行不通,因为按钮仍然具有默认样式,内部带有div
【解决方案2】:

您应该使用 Jquery 选择按钮并在 drawcallback 中添加类。像这样的:

$('.buttons-excel').addClass('waves-effect waves-light btn');

或者:

 var table = $('#example').DataTable({
    "ajax": 'https://api.myjson.com/bins/qgcu',
    "order": [],
    "dom": 'Bfrtip',        
    "buttons": {
    "dom": {
       "button": {
        "tag": "button",
        "className": "waves-effect waves-light btn mrm"
       }
    },
     "buttons": [ 'copyHtml5', 'excelHtml5', 'csvHtml5', 'pdfHtml5' ]   
   }
 });

【讨论】:

  • 谢谢!这行不通,朋友。你不需要 JQuery,DataTables 有一个按钮的“className”选项,我已经尝试过了,就像我在帖子中所说的那样。但是,该按钮看起来不像 Materialize 的。这是截图(第一行是我希望它们的样子,第二行是它们的样子):i.imgur.com/VN08uro.png
  • 对不起,我看错了。我不是专家我可以承认。我想在我的数据表上使用引导按钮,并且只能通过在我的“drawCallback”中执行 addClass 来使其工作
【解决方案3】:

使用buttons.dom.button 定义将用于按钮的类和元素。

例如:

var table = $('#example').DataTable({
    "ajax": 'https://api.myjson.com/bins/qgcu',
    "order": [],
    "dom": 'Bfrtip',        
    "buttons": {
       "dom": {
          "button": {
            "tag": "button",
            "className": "waves-effect waves-light btn mrm"
          }
       },
       "buttons": [ 'copyHtml5', 'excelHtml5', 'csvHtml5', 'pdfHtml5' ]   
    }
});

有关代码和演示,请参阅this jsFiddle

【讨论】:

  • 是的,你明白了!太感谢了!我不想碰运气什么的,但你也不知道如何将分页更改为 Materialise 分页,对吗?如果您不这样做,请不要担心,我会尝试自己解决。但再次,非常感谢你!
  • @T.Ferreira,这只是一个 hack,但请参阅此示例 jsfiddle.net/ey891een/2
  • 不错!我明天看看能不能改进一下。但是非常感谢你,你的帮助真是太棒了!
  • 再次感谢您!你真的很棒!您似乎对 DataTables 了解很多,所以您介意我多了解一下您的大脑吗?我有一个向表格添加新项目的按钮,为此我使用了模态。因此,当用户单击该按钮时,会弹出一个带有项目详细信息的表单。我正在使用 Materialise 的 Modals(请参阅此处:materializecss.com/modals.html)。这是该按钮的代码:<a class="waves-effect waves-light btn modal-trigger" href="#modal1">New Item</a>.
  • 所以我想做的是将此按钮与其他按钮(excel、复制等)对齐。我可能会创建一个自定义的 DataTables 按钮,该按钮的功能与此按钮相同,但这需要能够为按钮提供 id,而 DataTables 似乎无法做到这一点。如您在 Materialise 站点中所见,为了使模态框工作,它必须有一个 id。你知道我该怎么做吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-08
  • 2017-05-11
  • 1970-01-01
相关资源
最近更新 更多