如何在父 div 中插入其他元素后动态更新子 div 宽度

How to dinamically update the child div width after insert other elements in the parent div

我有一个主div(具有固定高度和 scroll-x 和 scroll-y):

<div style="position:relative;border:solid 2px #000;overflow-y:scroll;overflow-x:scroll; height:200px; width:100%;" id="pippo">
</div>

和一堆子 div 在 js 中动态创建并以绝对位置插入到父 div 中:

<div style='z-index:3;position:absolute; top: 50px; left: "+pos+"px;border:solid 1px;'>m</div>

这个 divs 可以在任何地方创建,也可以超出父 div 的高度和宽度(我不在乎,因为我有滚动条)。

我的问题是: 还有其他子 divs(在 js 中创建)代表图表等背景。 div 有边框,宽度为 100%。其中之一的示例:

<div style='z-index:2;border-bottom:solid 1px #ccc; color:#ccc;position:absolute;width:100%;bottom:"+yyy+"px;'>0</div>

当 javascript 动态创建 divs 时,背景不会将其宽度更新为新宽度(如果 divs 超出父尺寸)。

因此,如果向右滚动,则看不到背景。 当父宽度动态变化时,如何给背景正确的宽度(100%)?

http://jsfiddle.net/4x2KP/157/

谢谢大家!

我不确定这是否是您所要求的,但此代码会在写入字母的同时创建这些背景线。

您可以轻松调整它,更改 "width" var.

var t = 250;
$(document).ready(function(){
 crea_bg();
    setTimeout(function(){ pippo(); }, t);
});
var pos = 0;
function pippo(){
    pos = pos + 30;
    crea_bg();
    $("#pippo").append("<div style='z-index:3;position:absolute; top: 50px;"
  +" left: "+pos+"px;border:solid 1px;'>m</div>");
 setTimeout(function(){ pippo(); }, t);
}

function crea_bg(){
 var yyy = 0;
    
 var width = pos + 30;
    
 $("#pippo").append("<div style='z-index:2;border-bottom:solid 1px #ccc;" 
  +"color:#ccc;position:absolute;width:"+width+"px;bottom:"+yyy+"px;'>0</div>");
    
 for (i = 25; i <= 300; i=i+25) {
  $("#pippo").append("<div style='z-index:2;border-bottom:solid 1px #ccc;"
         +" color:#ccc;position:absolute;width:"+width+"px;bottom:"+(yyy+(-i))+"px;'>"+(-i)+"</div>");
  $("#pippo").append("<div style='z-index:2;border-bottom:solid 1px #ccc;"
         + "color:#ccc;position:absolute;width:"+width+"px;bottom:"+(yyy+(i))+"px;'>"+i+"</div>");
 }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
<div style="position:relative;border:solid 2px #000;overflow-y:scroll;overflow-x:scroll; height:200px; width:100%;" id="pippo">
    
</div>

如果您可以将特定的 class 添加到轴 div,我已经解决了这个问题。

您可以监听 #pippo 上的滚动事件并调整轴的偏移量,因为它在 #pippo 内水平固定。但是你可能需要将数字部分和轴线部分分开才能使数字部分可以通过滚动条移动。

var t = 250;
var $axis;
var offsets;
$(document).ready(function(){
    crea_bg();
 setTimeout(function(){ pippo(); }, t);
});
var pos = 0;
function pippo(){
    pos = pos + 30;
    $("#pippo").append("<div style='z-index:3;position:absolute; top: 50px; left: "+pos+"px;border:solid 1px;'>m</div>");
    setTimeout(function(){ pippo(); }, t);
}

function crea_bg(){
    var yyy = 0;
    $("#pippo").append("<div class='axis' style='z-index:2;border-bottom:solid 1px #ccc; color:#ccc;position:absolute;width:100%;bottom:"+yyy+"px;'>0</div>");
 for (i = 25; i <= 300; i=i+25) {
  $("#pippo").append("<div class='axis' style='z-index:2;border-bottom:solid 1px #ccc; color:#ccc;position:absolute;width:100%;bottom:"+(yyy+(-i))+"px;'>"+(-i)+"</div>");
  $("#pippo").append("<div class='axis' style='z-index:2;border-bottom:solid 1px #ccc; color:#ccc;position:absolute;width:100%;bottom:"+(yyy+(i))+"px;'>"+i+"</div>");
 }
  $axis = $('.axis').css('left', 0);
}

$('#pippo').scroll(function() {
    //var currentLeft = parseFloat($axis.css('left'));
   //console.log($axis.css('left'), currentLeft, $axis.position().left);
    //$axis.css('left', currentLeft - $axis.position().left);
  $axis.css('left',  '-=' + $axis.position().left);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
<div style="position:relative;border:solid 2px #000;overflow-y:scroll;overflow-x:scroll; height:200px; width:100%;" id="pippo">
</div>

避免典型的文档流

如果您必须避免典型的文档流,则需要在 <div id="pippo"> 及其子元素之间插入另一个容器,然后根据需要手动更新新容器的 width/height。

保持典型的文档流程

如果您不需要绕过正常的文档流程,而只是想寻找任何可能的方法来扩展父项,请结合使用 display: inline-blockwhite-space: nowrap:

$(document).ready(function() {
 setInterval(function() {
        $('#pippo').append('<div class="childDiv">m</div>')
    }, 250);
});
#pippo {
    border: solid 2px #000;
    height: 200px;
    width: 100%;
    overflow-y: scroll;
    overflow-x: scroll;
    white-space: nowrap;
}

.childDiv {
    display: inline-block;
    border: solid 1px #000;
    margin: 5px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>

<div id="pippo"></div>