如何根据前身动态移动DIV

时间:2016-08-01 16:02:41

标签: javascript jquery css sharepoint css-position

我有一系列DIV,都是同一个类(.ms-acal-item)。我想要做的就是获得每个人的位置,将其与上面的位置进行比较,并在需要时将其移位。这是为了更正事件切片重叠的SharePoint 2013日历上的问题。到目前为止,这是我的代码:

$(function() {

   $('.ms-acal-item').each(function(i, obj) {
    var tile = jQuery(this);
    var prev = tile.prev();
    var prevPos = prev.position();
    var tilePOs = tile.position();
    var curTop = parseInt(tilePos.top);
    var newTop = parseInt(prevPos.top) + 30;
    if(curtop !== newTop){
    tile.css('top', newTop);
    }
   });

});

以下是SharePoint生成的内容的示例: enter image description here

每个瓷砖高20px,绝对符合直线排列。我需要做的是比较每个瓷砖与其前身的位置,然后将其向下移动30px(如果它已经不存在)(瓷砖为20px,它们之间为10px)。到目前为止,它不起作用 - 我的代码似乎对磁贴位置没有影响。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

逻辑中存在一个问题,在处理第一个元素时我们没有任何前面的元素,所以我们需要忽略它并且代码中的错误很少(可变大小写)。下面是修改代码。(要查看更改效果,我将样式从顶部更改为边距左边,之后更正

$(function() {
   $('.ms-acal-item').each(function(i, obj) {
    var tile = $(this);
    var prev = tile.prev();
    if (typeof prev.position() !== "undefined") {
        var prevPos = JSON.parse(JSON.stringify(prev.position()));
        var tilePos = JSON.parse(JSON.stringify(tile.position()));
        var curTop = parseInt(tilePos.top);
        var newTop = parseInt(prevPos.top) + 30;
        if(curTop !== newTop){
        tile.css('margin-left', newTop);
        }
    }
   });

});