javascript - 如何在数据表中进行精确查询搜索?
问题描述
我制作了一个按给定过滤器搜索的脚本。一切正常,除了男性/女性搜索,因为女性这个词包含男性这个词。选择男性也会给我女性的结果。
我尝试在 JS 中选择性别之前和之后添加 '\b' 和 '\s' ,都带有单斜杠和双斜杠。下面是代码:
<div id="filters">
<h2>Filter Tables By</h2>
Topic:
<select id="topic_group" onchange="createSearchString();">
<option></option>
<option>Cancer</option>
<option>Smoking</option>
<option>Vaccinations</option>
<option>Health Screenings</option>
<option>Usual Place of Health Care</option>
</select>
Population of interest (Total, Male, Female):
<select id="popinterest_group" onchange="createSearchString();">
<option></option>
<option>Total</option>
<option>Male</option>
<option>Female</option>
</select>
</div>
<script src="/TemplatePackage/3.0/js/libs/jquery-datatables/jquery.dataTables.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$('#example').dataTable({
sDom:'<"nhis_search"f>t<"nhis_length"l> <"nhis_pagination"ip>',
aaSorting: [],
oLanguage: { sSearch: 'Additional search terms:' },
});
});
var searchString = new String();
function createSearchString() {
searchString = $('#topic_group').val() + ' ' + $('#popinterest_group').val() + ' ' + $('#outcomes_group').val();
$('#example_filter').find('input').val(searchString);
$('#example_filter').find('input').trigger('keyup');
}
</script>
解决方案
只需在您的过滤器选项中添加值,然后在onchange时检查所选选项,然后使用数据表过滤器根据列和过滤器过滤数据
注意:如果您的目的是使用精确值过滤数据,请不要使用search()方法
<div id="filters">
<h2>Filter Tables By</h2>
Topic:
<select id="topic_group" onchange="createSearchString();">
<option></option>
<option>Cancer</option>
<option>Smoking</option>
<option>Vaccinations</option>
<option>Health Screenings</option>
<option>Usual Place of Health Care</option>
</select>
Population of interest (Total, Male, Female):
<select id="popinterest_group" onchange="createSearchString();">
<option></option>
<option>Total</option>
<option value="0">Male</option>
<option value="1">Female</option>
</select>
</div>
<script src="/TemplatePackage/3.0/js/libs/jquery-datatables/jquery.dataTables.js"></script>
<script type="text/javascript">
$(document).ready(function () {
var table = $('#example').dataTable({
sDom:'<"nhis_search"f>t<"nhis_length"l> <"nhis_pagination"ip>',
aaSorting: [],
oLanguage: { sSearch: 'Additional search terms:' },
});
});
function createSearchString() {
var gender = $('#popinterest_group').children("option:selected").val(); // get the option value
var filteredData = table
.column( 0 ) // index of column
.data()
.filter( function ( value, index ) {
if (gender == 0) return value == "male"
else if (gender == 1) return value == "female"
return value
} );
}
</script>
推荐阅读
- c++ - 一个头文件中的类名使用,不包括类定义头文件
- python - 将 PDF 表格作为文本导入时处理空白单元格
- reactjs - 在 React Input 中,如何将输入的每个字母转换为大写字母,但是您可以在中间输入而光标不会在每次按键时跳到结尾?
- macos - 如何在没有依赖关系的情况下向 OS X 上的 USB 设备发送命令(仅从命令行)?
- android - 无法解析符号“OneSignal”
- objective-c - 如何在 textView Objectve C 中进行超链接 - Xcode
- hadoop - Hadoop,不同卷上的目录
- aem - 如何在 AEM 中为错过的问题创建弹出窗口?
- python - 如何获取 Linux 终端名称
- python - 为 LSTM 模型定义目标和训练值