前端table表格箭头上下移动

因业务需求,需要按上下移动箭头来使得光标上下移动。且表格是不规则的,存在单元格合并(横向,纵向都有)且并非所有的单元格都是input框。故使得功能开发出来比较麻烦。

/**
     * 获取单元格在表格中的绝对位置
     * @param td
     * @returns {number}
     */
    function getTdOfTableLocation(td) {
        let colCount=0;
        td.prevAll("td").each(function (i,obj) {
                colCount += obj.colSpan;
        });
        let tr = td.closest("tr");
        let deep = 1;
        while (tr.prev("tr").length > 0){
            let tempCount = colCount;
            tr = tr.prev("tr");
            deep++;
            tr.find("td").each(function (i,obj) {
                if(obj.rowSpan >= deep){
                    colCount+= obj.colSpan;
                }else{
                    tempCount -= obj.colSpan;
                }
                if(tempCount < 0){
                    return false;
                }
            })
        }
        return colCount;
    }
//监听回车事件
        document.onkeydown=function(e) {
            if(e.keyCode == 40){
                if($(e.target).closest("#tableId").length > 0){
                    let rowSpan = $(e.target).closest("td")[0].rowSpan;
                    let index = rowSpan - 1;
                    let colCount = getTdOfTableLocation($(e.target).closest("td"));
                    $(e.target).closest("tr").nextAll("tr:eq("+index+")").find("td").each(function (i,obj) {
                        if(colCount == getTdOfTableLocation($(obj))){
                            $(obj).find("input").focus();
                            return false;
                        }

                    })
                }
                return false;
            }else if(e.keyCode == 38){
                if($(e.target).closest("#tableId").length > 0){
                    let rowSpan = $(e.target).closest("td")[0].rowSpan;
                    let index = rowSpan - 1;
                    let colCount=getTdOfTableLocation($(e.target).closest("td"));
                    $(e.target).closest("tr").prevAll("tr:eq("+index+")").find("td").each(function (i,obj) {
                        if(colCount == getTdOfTableLocation($(obj))){
                            $(obj).find("input").focus();
                            return false;
                        }
                    })
                }
                return false;
            }
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值