使用带有引导程序的 dataTables 将自定义控件附加到 dom

Posted

技术标签:

【中文标题】使用带有引导程序的 dataTables 将自定义控件附加到 dom【英文标题】:Append custom control to dom using dataTables with bootstrap 【发布时间】:2017-10-18 22:20:16 【问题描述】:

我为数据表搜索框添加了一个选择(下拉),用于搜索每列,并尝试将该选择添加到搜索框,如下所示->

var table = $('#example').DataTable(
 dom: '<l<"toolbar">f>rtip',
            language: 
                search: "_INPUT_", //To remove Search Label
                searchPlaceholder: "Search..."
            
)  
$("div.toolbar").html(select);

CSS

.toolbar 
        float: right;
    

它实际上在小提琴上工作 -> https://jsfiddle.net/32v2qpj1/5/

令人惊讶的是,当我在我的 .aspx 页面上实现相同的长度和过滤器位置时,如下图所示。每当我使用 dom 时,引导行和列网格都会丢失。它将长度和搜索添加为 2 个单独的行,并在页脚处添加相同的行。我尝试了来自https://datatables.net/reference/option/dom 的示例来检查我的代码是否错误。只是在使用 DOM 时重新定位!

我不知道为什么只添加 dom 时它会重新定位。我想知道有没有其他方法可以将选择控件添加到搜索框?

【问题讨论】:

【参考方案1】:

嗯。如果您设置了dom 选项,那么您将覆盖默认的dom 设置,该设置在带有 Bootstrap 的 dataTables 中是:

"<'row'<'col-sm-6'l><'col-sm-6'f>>" +
"<'row'<'col-sm-12'tr>>" +
"<'row'<'col-sm-5'i><'col-sm-7'p>>",

当我们有这样的预定义设置时,没有理由注入.toolbar。而是给过滤器部分多一点空间:

"<'row'<'col-sm-5'l><'col-sm-7'f>>" +

并为#select 定义最大宽度:

select#select 
  width: 100px;
  display: inline-block;
 

最后将标准 Bootstrap 类添加到 #select

<select id="select" class="form-control input-sm">

并将选择附加到.dataTables_filter

$(".dataTables_filter").append(select);

这提供了我们想要的 Bootstrap 响应式体验。

更新小提琴 -> https://jsfiddle.net/32v2qpj1/6/


注意:如果您使用引导程序,请记住删除jquery.dataTables.min.css!相反,将 &lt;table&gt; 设置为 Bootstrap 方式:

<table id="example" class="table table-striped table-bordered" cellspacing="0" >

【讨论】:

非常感谢先生的帮助!我对您的代码做了一些小改动,因为使用 .append(dom element) 无法在 IE 上运行并且错误“选择未定义”。于是改了 $(".dataTables_filter").append(select);到... 让 el = document.querySelector('#select'); $(".dataTables_filter").append(el);然后它在 IE 上运行良好。再次感谢先生!

以上是关于使用带有引导程序的 dataTables 将自定义控件附加到 dom的主要内容,如果未能解决你的问题,请参考以下文章

将自定义数据属性插入 JQuery DataTables

带有 twitter bootstrap 的 javascript 数据表

如何将自定义列添加到数据表?

带有自定义边框的表格

如何将自定义 CSS 添加到清晰的表单中?

Codeigniter + dataTable 自定义删除与引导模型