jQuery wrapAll/unwrap 搞乱了定位

标签 jquery css positioning wrapall

用 jQuery 包装 div 后,展开它们然后尝试再次包装它们似乎会丢失 float 属性(我的猜测),我不知道如何解决这个问题。

当第一次按下 JSFiddle 中的换行按钮时,它会像我期望的那样对齐 div。然后我打开 div 并将它们放回到原来的位置,这也很好。但是当我再次换行时,div 会一个接一个地排列,而不是形成方形。任何想法出了什么问题吗?

JSFiddle

HTML

<div id="container">
    <div id="a1" class="block">A1</div>
    <div id="a2" class="block">A2</div>
    <div id="b1" class="block">B1</div>
    <div id="b2" class="block">B2</div>
</div>
<button onclick="wrapIt()">wrap</button>
<button onclick="unwrapIt()">unwrap</button>

CSS- 请参阅 JSFiddle。它只是设置容器的定位、其中的四个 div 以及包装。

JS

function wrapIt(){
    $(".block").wrapAll("<div id='wrapping'></div>")
    $(".block").css({ 'position': 'relative' })
    $(".block").css({ 'display': 'inline-block' })
    $(".block").css({ 'margin': 10 }) 
    $(".block").css({"float": "left"})
}
function unwrapIt(){
    $(".block").unwrap()
    $(".block").css({ 'position': 'absolute' })
    $(".block").css({ 'margin': 0 }) 
    $(".block").css({"clear": "both"})

    $("#a1").css({"margin-top": 30})
    $("#a1").css({"margin-left": 30})
    $("#a2").css({"margin-top": 30})
    $("#a2").css({"margin-left": 80})
    $("#b1").css({"margin-top": 80})
    $("#b1").css({"margin-left": 30})
    $("#b2").css({"margin-top": 80})
    $("#b2").css({"margin-left": 80})    
}

最佳答案

如果有人搜索类似的解决方案:我确实以稍微不同的方式解决了问题 - 我为此使用了 addClass 和 removeClass 。 (仍然不知道为什么第一个不起作用......)

JSFiddle

这是代码:

HTML 同上

CSS

.wrappedclass {
    position: relative;
    float: left;
}
.unwrappedclass {
    position: absolute;
    clear: both;

}

.block {
    height: 40px;
    width: 40px;
    background-color: grey;

}
#container {
    height: 150px;
    width: 150px;
    border: 1px solid black;
}
#wrapping {
    position: absolute;
    width: 150px;
    height: 150px;
    background-color: white;
    border: 1px dashed black;
}

JS

$(document).ready(function(){
     $(".block").addClass("unwrappedclass")
     $("#a1").css({"margin": "30px 0 0 30px"})
     $("#a2").css({"margin": "30px 0 0 80px"})
     $("#b1").css({"margin": "80px 0 0 30px"})
     $("#b2").css({"margin": "80px 0 0 80px"})
})

function wrapIt(){
    $(".block").wrapAll("<div id='wrapping'></div>")
               .removeClass("unwrappedclass")
               .addClass("wrappedclass")
    wrappedFormation()
}

function unwrapIt(){
    $(".block").unwrap()
               .removeClass("wrappedclass")
               .addClass("unwrappedclass")    
    unwrappedFormation()
}

function unwrappedFormation(){
    $("#a1").css({"margin": "30px 0 0 30px"})
    $("#a2").css({"margin": "30px 0 0 80px"})
    $("#b1").css({"margin": "80px 0 0 30px"})
    $("#b2").css({"margin": "80px 0 0 80px"})      
}

function wrappedFormation(){
    $(".block").css({"margin": "17px"})
}

关于jQuery wrapAll/unwrap 搞乱了定位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23908135/

相关文章:

css - 使子元素在其父元素的 `mouseleave` 上消失

css - 当前面的 div 有绝对定位时,让页脚留在底部(不需要 "sticky")?

javascript - 通过滚动触发 CSS 关键帧动画

jquery - CSS 动画完成后反转

jquery - 如何使用 Bootstrap 使按钮出现在中心

html - 当它们的高度不同时,为什么第一个跨度会进入第二个跨度的底部?

css - 如何在 Zurb Foundation 4/5 全屏中制作行?

javascript - 将鼠标悬停在其父 div 上时,如何更改链接为对象的 SVG 的属性?

javascript - 在某些情况下禁止用户离开页面

html - 容器 Bootstrap 的绝对位置