jquery - 如何避免 <div> 元素在展开时移位

标签 jquery html css

我正在使用 <div> 构建日历元素和 CSS。

使用 jQuery,当单击日历上的某一天时,一个类将应用于 <div>元素。这导致这一天的时间延长。

问题:

当日期扩展时,它会取代日历中的所有其他 div。如下图所示。

HTML

HTML 由 PHP for 循环创建,显示所选月份中的每一天。

<div id="calender">
     <div id="cal-day" class="1" onclick="expand(1)">
         <div id="datenum"><p>1</p></div>
     </div>
     <div id="cal-day" class="2" onclick="expand(2)">
         <div id="datenum"><p>2</p></div>
     </div>
</div>

CSS - 为了便于阅读,我删除了美观的样式代码。

#calender{
    position: relative;
    width: 1230px;
    height: 800px;
}

#cal-day{
    float: left;
    width: 200px;
    height: 200px;
    margin: 2px;
    overflow: hidden;
}

#datenum{
    width: 30px;
    height: 30px;
}
.dayselected{

    overflow: scroll !important;
    width: 400px !important;
    height: 400px !important;

}
#content{
    display: none;
}
#content.show{
    display: block;
}

jQuery:

function expand(date){

     if($("." + date).hasClass("dayselected")){

        $("." + date).removeClass("dayselected");
        $(".content" + date).removeClass("show");

     }else{

        $("." + selectedDay).removeClass("dayselected");
        $("." + date).addClass("dayselected");
        $(".content" + date).addClass("show");

    }

    selectedDay = date;

 }

选择日期之前:

Before a day is selected:

选择一天后,与其他<div>元素移位:

After a day is selected:

是否可以让单击的日期覆盖其他 div 而不是取代它们?

这是一个 JSFiddle:https://jsfiddle.net/quucxwpy/

最佳答案

首先,您有多个重复的 id 属性,这意味着您的 HTML 无效。这些应该改为类。

要解决此问题,一种可能的解决方案是 clone() 原始 cal-day 元素并将其绝对放置在原始元素之上。这样就不会破坏其他同级 cal-day 元素的文档流。试试这个:

<div id="calender">
    <div class="cal-day">
        <div class="datenum">
            <p>1</p>
        </div>
    </div>
    <div class="cal-day">
        <div class="datenum">
            <p>2</p>
        </div>
    </div>
    <!-- other days...
</div>
$('.cal-day').click(function() {
    $('#dayselected').remove();
    var $day = $(this);
    var $dayClone = $day.clone(false)
        .prop('id', 'dayselected')
        .css({
            top: $day.position().top,
            left: $day.position().left
        })
        .appendTo('#calender');
});

$('#calender').on('click', '#dayselected', function() {
    $(this).remove();
});

Working example

关于jquery - 如何避免 <div> 元素在展开时移位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34454668/

相关文章:

javascript - 使用 jquery 切换当前类

javascript - HIghcharts 衡量不需要的白色边框

html - 我的 HTML 中的某个部分的位置有问题

javascript - addClass() 函数未应用于 ID

指定 header 时,jQuery AJAX 无法工作(发出 OPTIONS 飞行前请求)

javascript - 悬停时的多个类动画

css - div 以不存在的边距插入其他 div

javascript - 使用 background-size :contain 时获取 div 背景图像的 XY 坐标和高度/宽度

javascript - 如何在新选项卡中打开 $state,go()

javascript - jQuery:按钮添加和删除最近