Javascript 使用按钮选择具有数据表的特定行

Javascript 使用按钮选择具有数据表的特定行,javascript,jquery,datatables,Javascript,Jquery,Datatables,我有一个包含以下列的表: 姓名、年龄、生日 我还有一个带有日期的输入字段 生日由日期填充。 我想创建两个按钮,如选择年龄>30岁的用户和选择年龄>60岁的用户 var table= $('#users').DataTable({ "drawCallback": updateDays(moment()), paging: false, columnDefs: [ { orderable: false,

我有一个包含以下列的表: 姓名、年龄、生日 我还有一个带有日期的输入字段

生日由日期填充。 我想创建两个按钮,如选择年龄>30岁的用户和选择年龄>60岁的用户

var table= $('#users').DataTable({
        "drawCallback": updateDays(moment()),
        paging: false,
        columnDefs: [ {
            orderable: false,
            className: 'select-checkbox',
            targets:   0
        } ],
        select: {
            style:    'multi'
        },
        order: [[ 1, 'asc' ]],
        buttons: [{'selectAll',
            'selectNone',
        ],
[……]

当您更改日期时,它会更新表中的年份

function updateDays(startDate) {
    $('.age').each(
        function () {
            var diff;
            var start;
            start = $(this).closest('tr').children('.birthday').text();
            start= moment(start, "DD/MM/YY");
            diff = startDate.diff(start, 'days');
            $(this).text(diff);
        });
[……]

代码改编自真实项目,因为它太长,所以请理解是否有一些编码错误;这里重要的是代码背后的逻辑,而不是代码本身


谢谢

我相信,这段代码做得很好:

//定义源数据 常数srcData=[ {姓名:'Christopher Evans',生日:'13/06/1981'}, {姓名:'Samuel L Jackson',生日:'21/12/1948'}, {姓名:'Tom Holland',生日:'01/06/1996'}, {姓名:'Robert Downey Jr',生日:'04/04/1965'} ]; //定义获取年龄函数 const getAgeAtDate=currentDate,birthDate=>{ const thiswearth=新日期currentDate.getFullYear,birthDate.getMonth,birthDate.getDate; const yearDiff=currentDate.getFullYear-birthDate.getFullYear; 返回ThisYearBirth>currentDate?yearDiff-1:yearDiff; }; //默认情况下,今天定义参考日期 var referenceDate=新日期; //定义过滤器边距30、60、0 var filterMargin=0; //定义数据表对象 const dataTable=$'mytable'.dataTable{ sDom:'t', 数据:srcData, 栏目:[ {标题:'name',数据:'name'}, {标题:'birth',数据:'birth'}, {title:'age as of today',data:null,render:data,type,row=>{ const today=新日期; const生日=新日期…行。生日。拆分“/”。反转; 返回GetAgeAttDateToday,生日; }} ] }; //定义外部搜索函数以与referenceDate进行比较 $.fn.DataTable.ext.search.pushsettings,行,索引,行Obj=>{ const birthday=新日期…rowObj.birthday.split'/'。反向; 返回GetAgeAttDateReferenceDate,生日>过滤器边缘; }; //设置引用日期回调 $'referenceDate'。关于'change',函数{ 如果!$this.val{ referenceDate=新日期; 回来 }; referenceDate=新日期…$this.val.split'-'; dataTable.column2.header.innerText='截止日期'+referenceDate.toLocaleDateString; dataTable.rows.everyfunction{ const birthday=新日期…this.data.birthday.split'/'。反向; const rowNum=this.index; dataTable.cellrowNum,2.node.innerText=getAgeAtDatereferenceDate,生日 } }; //应用过滤器 $'.filter'。单击,函数{ filterMargin=$this.attr'margin'; dataTable.draw; }; 30岁以上 60岁以上 透明过滤器
你能解释一下背后的商业逻辑吗?据我所知,您的输入字段指定了一些数据,您的按钮过滤表格,以匹配在该日期到来时年龄超过30岁或60岁以上的用户?此外,我无法理解更新生日年份的逻辑,因为提供的上下文不够充分。你能分享更多的细节吗?你好@ygorbunkov,谢谢你的回复。我在这个输入字段中选择了一个日期,例如2020/03/07。在表中,我有一个用户John Doe,出生于1988年。因此,年龄字段将更新为32。如果我将日期改为2021/07/20,年龄将为33岁。如果我选择2005/01/10,则年龄将为17岁,因此当我在前两个案例中单击年龄>30岁的用户时,将选择该用户,但在最后一个案例2005年不会选择该用户。Hello@ygorbunkov,如果我要选择行怎么办?我的意思是,我想保持所有行可见,只需选择年龄>30岁的用户即可。例如,您需要选择扩展并对上述代码进行轻微更改:
function updateDays(startDate) {
    $('.age').each(
        function () {
            var diff;
            var start;
            start = $(this).closest('tr').children('.birthday').text();
            start= moment(start, "DD/MM/YY");
            diff = startDate.diff(start, 'days');
            $(this).text(diff);
        });