2016-05-08 152 views
4

基本上我试图做这样的事情在这个例子中数据表HTML5数据搜索单元属性不起作用

https://datatables.net/examples/advanced_init/html5-data-attributes.html

我的代码如下

var dTable = $('#ajaxresults').DataTable({ 
    "order": [[1, "desc" ]], 
    "sPaginationType": "full_numbers", 
    "ajax": "/users.json", 
    createdRow: function(row, data, index) { 
     if(data[6]=="Special") { 
      $(row).find('td').eq(0).attr("data-search", "Special"); 
     } 
    } 
}); 

然而,一旦数据集加载在页面上,我试图搜索特别没有返回,但如果我在开发工具中查看它,我可以清楚地看到设置到列的数据搜索属性,从我读过的东西我认为我添加初始化之后的数据搜索列属性为什么搜索不起作用?但我搜索了整个文档,我没有看到其他方法来实现这个任何人有任何想法呢?

P.S.我忘了说这个“特殊”词不会出现在任何只是作为数据搜索属性添加到某些用户的列中,因此它不是真正可见的,但应该可以通过数据搜索属性搜索到。

+1

“_...而应搜索的低谷数据搜索attribute_”,不!正如我在答案中解释的那样,只有当**标记**以这种方式格式化时才有效 - 您不能通过代码将'data-search'注入到'​​'中,然后dataTable开始根据该属性中的值进行过滤。你所指的例子也是基于预先格式化的标记,并且我给出的链接中的文档指出了区别。如果您使用的是AJAX或JSON源,则必须在初始化dataTable之前使用'column.render'(或在代码中预处理

结构)。 – davidkonrad

回答

6

HTML5 data-*属性工作如果列初始化时列中的所有单元格都具有data-*属性。你在每行插入后插入data-search,并且其所有单元格都被插入 - 这就是为什么data-search在这种情况下不起作用。

您可以改为使用渲染方法。

columnDefs : [ 
    { targets: [0], 
    render: function (data, type, full, meta) { 
     if (type === 'filter') { 
      return full[6] == "Special" ? "Special" : data 
     } else { 
      return data 
     } 
    } 
    } 
] 

这样做也会这样,当用户在搜索框中输入时,如果col#6 ==“Special”,则返回col#0的“Special”。

+0

谢谢大卫!我也尝试过你的解决方案之前,事实上我已经尝试了很多解决方案,我在网上找到,但我找不到一个好的解决方案:(这就是为什么我张贴在这里...但这不是很好,因为我不'要修改单元格中的值,单元格的值必须保持不变,并将“特殊”单词添加到数据搜索属性中,这样我可以在我的搜索中查找这两个单元格(单元格值或“特殊”单词) –

+0

PS我忘了说这个“特殊的”单词不会出现在任何只是作为数据搜索属性添加到某些用户的列中,所以它不是真的可见,但应该可以通过数据搜索属性搜索。 –

+1

@ClaudiuD 。你是不是**如上修改单元格的值 - 会发生什么情况是返回一个不同于单元格值的_different_值,何时以及仅当**数据表即将过滤数据时通常这时用户键入搜索框。**与'data-search'完全相同** ... – davidkonrad