jQuery获取两个单元格之间的表单元格范围

jQuery获取两个单元格之间的表单元格范围,jquery,Jquery,我正在构建自己的日期范围选择器(我知道jQueryUI自己的日期选择器,它不适合我的需要) 我正在使用on('mouseover')在已选择的签入日期和当前悬停日期之间选择一系列日期: function datepicker_live_selection_hover_css(checkin) { $('.datepicker-cal-wrapper table tbody tr td.datepicker-cal-available').on('mouseover', func

我正在构建自己的日期范围选择器(我知道jQueryUI自己的日期选择器,它不适合我的需要)

我正在使用on('mouseover')在已选择的签入日期和当前悬停日期之间选择一系列日期:

function datepicker_live_selection_hover_css(checkin) {

        $('.datepicker-cal-wrapper table tbody tr td.datepicker-cal-available').on('mouseover', function () {

            var checkout_selected = datepicker_checkout_selected();

            if ( (checkin !== null) && (checkout_selected == false) ) {

                var hover_date = $(this).attr('data-date');

                $('.datepicker-cal-wrapper table tbody tr td').each (function() {

                    var date = $(this).attr('data-date');

                    if ( (date > checkin) && (date <= hover_date) || (date < checkin) && (date >= hover_date) ) {
                        $('.datepicker-cal-wrapper table tbody tr td[data-date="' + date + '"]').addClass('datepicker-cal-selected-date');
                    } else {
                        $('.datepicker-cal-wrapper table tbody tr td[data-date="' + date + '"]').removeClass('datepicker-cal-selected-date');
                    }

                });

            }

        });

    }
function datepicker\u live\u selection\u hover\u css(签入){
$('.datepicker cal包装表tbody tr td.datepicker cal available')。on('mouseover',function(){
var checkout_selected=datepicker_checkout_selected();
如果((签入!==null)和(&(签出所选==false)){
var hover_date=$(this.attr('data-date');
$('.datepicker cal包装表tbody tr td')。每个(函数(){
变量日期=$(this.attr('data-date');
如果((日期>签入)和((日期=悬停日期)){
$('.datepicker-cal包装表tbody tr td[data date=“'+date+'”).addClass('datepicker-cal-selected-date');
}否则{
$('.datepicker-cal包装表tbody tr td[data date=“'+date+'“]”)。removeClass('datepicker-cal-selected-date');
}
});
}
});
}
这是很好的工作,但它是非常缓慢和滞后,我相信一定有一个更好的方法来做上述。目前,我正在使用foreach函数在所有表单元格中循环

有人能提出一种更有效的方法吗


这里是一个完整的JSFIDLE:

这里是一个如何实现这一点的示例

注意:此函数也适用于其他表。 工作原理:

  • 获取保存表的父元素
  • 获取包含类“datepicker cal available”的所有元素
  • 获取当前和签入元素的索引
  • 设置切片开始和结束值,以便我们可以获得受影响单元格的范围
  • 删除“…选定日期”类(清理)并将该类添加到受影响的单元格中
  • 我还简化了您的签入和签出功能

    function datepicker_checkin_selected() {
        var elements = $('.datepicker-cal-selected-checkin');
        return elements.length > 0;
    }
    
    function datepicker_checkout_selected() {
        var elements = $('.datepicker-cal-selected-checkout');
        return elements.length > 0;
    }
    
    

    该死,这是一些有效的代码,现在一点也不落后了。我将不得不研究你的悬停/选择函数,这样我才能更好地理解它,也许可以修改许多其他代码,使之更有效地工作。非常感谢你的帮助!很高兴我能帮忙:)
    function datepicker_checkin_selected() {
        var elements = $('.datepicker-cal-selected-checkin');
        return elements.length > 0;
    }
    
    function datepicker_checkout_selected() {
        var elements = $('.datepicker-cal-selected-checkout');
        return elements.length > 0;
    }