如何在datatables中进行精确查询搜索?

3

我写了一个根据给定筛选条件进行搜索的脚本。一切都很好,除了男性/女性的搜索,因为女性这个词里面含有字。 选择男性会同时返回女性的结果。

我尝试在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>

你可以查看dataTable论坛[https://datatables.net/forums/discussion/49603],他们发布了一个答案。 - Nicolae
为什么不在您的选择选项中添加值?使用布尔值0表示男性,1表示女性,然后当您选择其中之一时,获取该值,然后根据条件进行过滤,如果为0,则返回gender ==“male”,否则返回... - Jems
使用正则表达式匹配确切单词 /^male$/g 表示男性,/^female$/g 表示女性。 - mr_pool_404
1个回答

1
只需在筛选选项中添加值,然后在“onchange”时检查“selected”选项,然后使用datatable过滤器根据“column”和“filter”来过滤数据。
注意:如果您的目的是使用精确值过滤数据,请勿使用“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>

如果你想使用“男性”和“女性”作为性别值而不是二进制表示,你可以在if条件中使用正则表达式:gender.match(/^male$/g)表示男性,else if gender.match(/^female$/g)表示匹配精确单词。 - mr_pool_404

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接