Javascript 从数据表中搜索
我使用上面的链接作为我搜索的例子,但是我的设置是完全不同的Javascript 从数据表中搜索,javascript,jquery,datatables,Javascript,Jquery,Datatables,我使用上面的链接作为我搜索的例子,但是我的设置是完全不同的 <td> <div class="plCell_desktop"> <input type="radio" class="" data-lnk_id="414107671" data-group="RUTH"> <label for="414107671">RUTH</label> </div> </td>
<td>
<div class="plCell_desktop">
<input type="radio" class="" data-lnk_id="414107671" data-group="RUTH">
<label for="414107671">RUTH</label>
</div>
</td>
露丝
这是我桌子上的摘录
唯一可见的数据位是“Ruth”。但是当我搜索say'76'时,它仍然会返回“Ruth”。
原因很可能是我在表格单元格中的信息比“Ruth”多得多 好的,我的问题是。你能强迫数据表从一个词的开头开始搜索吗。e、 g.(输入“uth”不会带回“Ruth”,但“Ru”会,希望它有意义)
你能用DataTables做一种“innerHTML.val()”搜索吗?你能用jQuery吗
$(".plCell_desktop label").each(function() {
// Using RexExp matching
RexExp regex = new RegExp(); // Your regex obj
if ($(this).val().match(regex)) {
// Do stuff if it matches
}
// Or if you just want to do something if it has a value:
if ($(this).val()) {
// ...
}
});
好的,我的问题是。您可以强制数据表从
一个词的开头。e、 g.(输入“uth”不会返回“Ruth”,
但是“Ru”会的,希望它有意义)
对。预先创建一个自定义过滤器,执行如下过滤。默认的“智能搜索”将被自定义筛选器否决,任何未来的筛选都将通过以下步骤:
$.fn.dataTable.ext.search.push(function( settings, data, dataIndex ) {
var term = $('.dataTables_filter input').val().toLowerCase()
for (var i=0, l=data.length; i<l; i++) {
if (data[i].toLowerCase().indexOf(term) == 0 ) return true
}
return false
})
$.fn.dataTable.ext.search.push(功能(设置、数据、数据索引){
var term=$('.dataTables_filter input').val().toLowerCase()
对于(var i=0,l=data.length;i
正如您可能注意到的那样,将dataTables过滤整体区分大小写是非常容易的(仅举一个例子)。过滤器数组是一种后进先出结构,在这种结构中,您可以将多个过滤器置于彼此之上。如果出于任何原因禁用“单词开头”,只需通过$.fn.dataTable.ext.search.pop()
即可删除过滤器动态筛选。如果您需要在代码中多次访问匹配的标签,您可能希望避免每次都计算正则表达式。一种解决方案是运行一次性预处理,以添加自定义属性。我们称之为isOk
然后,可以使用标准jQuery选择器选择标签:
$('label[isOk=Y]')
下面是一些演示代码
var regex=/^RU/;
$('label')。每个(函数(){
$(this.attr('isOk',$(this.html().match(regex)!==null?'Y':'N');
});
var res=$('label[isOk=Y]');
//检查我们是否选择了正确的标签
res.each(function(){console.log($(this.attr('for'));});
露丝
露丝也是
不是真的,露丝
如果我可以问的话。我得到一个错误“TypeError:无法读取未定义的属性“push”。你能帮忙吗?@morne,你似乎在dataTables js完全加载之前调用了这个?这是唯一一个似乎合乎逻辑的解释。你可以随时添加自定义筛选器,也可以在表初始化之后添加。我想这对你来说是可以的。除此之外,我没有完全确定你想要从标签中提取文本部分。如果是这样的话代码当然应该是if($(数据[i],'label')。text().toLowerCase().indexOf(术语)==0)返回true
…有点延迟。在调试JS时,我得到了一个“未定义的搜索”。这可能是DataTables的版本。还有另一个使用$.fn.dataTableExt.afnFiltering.push(函数(oSettings,aData,idatadex)的例子
。这可能有用吗?嘿@morne$.fn.dataTableExt.afnFiltering
是$.fn.dataTable.ext.search
的旧名称,它们是一样的。你使用的是dataTables 1.10.x…?:)是的。但是从外观上看,1.9.4。也许我应该换个新版本。