如何将datepicker包装在一个新的div中?演示

问题描述 投票:3回答:2

我需要将我的日期选择器放在一个新的div中,这将是一个(shadow-)border-div。

我尝试过以下方法:

beforeShow: function (input) {
  $(input).datepicker("widget")
   .find(".ui-datepicker-header, ui-datepicker-calendar")
   .wrapAll("<div class='datepickerBorder'/>");
}

但它不起作用。

另外我试图包装整个选择器,但是然后border-div的位置,大小等不一样。

javascript jquery jquery-ui jquery-ui-datepicker
2个回答
5
投票

datepicker控件绝对定位。将其包含在元素内部将不包含该元素内的datepicker - 包装元素将仅位于页面的底部,而datepicker将在控件旁边呈现。

解决方案1:您可以将类添加到datepicker小部件本身:

$("#datepicker2").datepicker({
    beforeShow: function() {
        $(this).datepicker("widget").addClass("datepickerBorder");
    },
    onClose: function() {
        $(this).datepicker("widget").removeClass("datepickerBorder");
    }
});

demo

解决方案2:在DOM加载时创建一个绝对定位的+隐藏包装div,并在显示时重新定位并重新调整datepicker后面的div。有一个问题:您无法在beforeShow函数内检查窗口小部件的偏移量(它将呈现的坐标)。


3
投票
$('#datepicker').wrap('<div class="datepickerBorder"/>');

这里#datepicker是datepicker输入字段的id,你可能还有别的东西。

检查jQuery .wrap()

你不需要在beforeShow()中这样做。在DOM就绪功能中执行此操作。

要包装datepicker的每个内部元素,你应该尝试

$('div#ui-datepicker-div > *').wrap('<div class='datepickerBorder'/>');
© www.soinside.com 2019 - 2024. All rights reserved.