【问题标题】:jQuery datatables - Filter by select input when input has html/images inside <td></td>jQuery 数据表 - 当输入在 <td></td> 中包含 html/图像时,通过选择输入进行过滤
【发布时间】:2015-11-26 10:29:01
【问题描述】:

我正在尝试使用选择输入 DataTables with select inputs DEMO 过滤我的表

我的问题是我的&lt;table&gt;&lt;td&gt; 中有几个图像/精灵等,我希望数据表在其中使用&lt;span class="hidden-val"&gt; 值。

例子:

<tr>
  <td>
    <span style="display:none" class="hidden-val">23</span>
    <i class="my-sprite-abc>My Logo</i>
  </td>
</tr>

我通过将字符串转换为 DOM HTML 来管理数据表以显示正确的选择输入值,然后得到 innerText,但我仍然在处理 column.search.draw() 部分,因为我不知道如何教数据表使用隐藏的跨度值。

$('#my-table').DataTable( {

        initComplete: function () {
            this.api().columns().every( function () {
                var column = this;
                var select = $('<select><option value=""></option></select>')
                .appendTo( $(column.footer()).empty() )
                .on( 'change', function () {
                    console.log($(this).val());
                    var val = $.fn.dataTable.util.escapeRegex(
                        $(this).val()
                        );

                    column
                    .search( val ? '^'+val+'$' : '', true, false )
                    .draw();
                } );

                column.data().unique().sort().each( function ( d, j ) {
                    var html_val = $.parseHTML(d)
                    //console.log(html_val);

                    if (html_val != null){ // check if html is not null
                        var new_d = $(html_val)[0].innerText // take first html object <span> in this case
                        select.append( '<option value="'+new_d+'">'+new_d+'</option>' )
                    }

                } );
            } );
        }
    } );

谢谢,如果你能帮我解决这个问题!

【问题讨论】:

    标签: javascript jquery html datatable datatables


    【解决方案1】:

    您可以创建一个type based search plugin,让您仅过滤hidden-val

    jQuery.fn.dataTable.ext.type.search.hiddenVal = function(data) {
        return $('<div>').append(data).find('.hidden-val').text()
    }
    

    并将具有hidden-val 的列设置为type

    ...
    columnDefs: [
        { type: "hiddenVal", targets: [0] } //fist column as example
    ],
    ... 
    

    演示 -> http://jsfiddle.net/dtuv0qhj/

    【讨论】:

    • 谢谢你,但我需要这个用于选择输入下拉列表:)。看看我演示的页脚 :)
    • @zer02,上述类型的过滤器对于 dataTable 来说是通用的/全局的 - 它也适用于您的 column.search( val ? '^'+val+'$' : '', true, false ).draw();
    • 我试过那个代码。它适用于搜索输入。但它会因选择输入而中断。它仍然会显示html代码23 &gt; 23作为选择
    • @zer02 - 我回家后会回复你,有 1.5 小时的旅行时间。这很容易克服,因此您可能已经自己找到了解决方案:)
    • 嘿,我找不到解决方案:/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    • 1970-01-01
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-25
    相关资源
    最近更新 更多