我有一个使用javascript动态生成的表,并根据数组的内容使用jQuery附加了行。
我的问题是我想使用css max-height
属性为表分配最大高度,以便在达到某个高度后,可以滚动表格。
这是必需的,因为该表可能包含大量行,然后它会变得太大。
我为表格分配了display: block
和max-height
的{{1}}属性,但该属性似乎被忽略了。桌子的高度仍然超出最大高度设置。有什么我想念的吗?
这是我的代码的精简版本,显示了我想要做的事情。我尝试将表放在像库巴建议的div中,但它仍然不起作用。
200px
$(document).ready(function() {
$("#mylink").click(function()
{
var jsvCustomIcons = [ "images/img1.png","images/img2.png","images/img3.png","images/img4.png","images/img5.png","images/img6.png" ];
var mydiv = document.createElement("div");
$(mydiv).attr("id","mydiv");
var iconSettingsTable = document.createElement("table");
$(iconSettingsTable).attr("id","iconSettingsTable");
var tempTR,tempDescTH,tempDelTH;
var tempDescTD,tempDelTD,tempImg,tempImg2,tempBold;
tempTR = document.createElement("tr");
$(tempTR).addClass("selectorRowHeader");
tempDescTH = document.createElement("th");
$(tempDescTH).addClass("selectorColHeader");
$(tempDescTH).html("Description");
tempDelTH = document.createElement("th");
$(tempDelTH).addClass("selectorColHeader");
$(tempDelTH).html("Delete");
$(tempTR).append(tempDescTH);
$(tempTR).append(tempDelTH);
$(tempTR).css("background-color","#d3d3d3");
$(iconSettingsTable).append(tempTR);
for(i=0;i<jsvCustomIcons.length;i++)
{
tempTR = document.createElement("tr");
$(tempTR).addClass("selectorRowData");
tempDescTD = document.createElement("td");
$(tempDescTD).addClass("selectorColData");
tempBold = document.createElement("b");
$(tempBold).html(jsvCustomIcons[i]);
$(tempBold).addClass("iconDescriptionTexts");
tempImg2 = document.createElement("img");
$(tempImg2).attr(jsvCustomIcons[i]);
$(tempImg2).addClass("iconDescriptionImages");
$(tempDescTD).append(tempBold);
$(tempDescTD).append(tempImg2);
tempDelTD = document.createElement("td");
$(tempDelTD).addClass("selectorColData");
tempImg = document.createElement("img");
$(tempImg).attr("id","delImage" + i);
$(tempImg).attr("src","images/delete.png");
$(tempImg).css("margin-top","5px");
$(tempImg).click(function()
{
// Code to handle clicks
});
$(tempDelTD).append(tempImg);
$(tempTR).append(tempDescTD);
$(tempTR).append(tempDelTD);
$(iconSettingsTable).append(tempTR);
}
$(iconSettingsTable).css({"position":"absolute","top":$("#iconSettingsSpan").position().top + 20,"left":0});
$(mydiv).append(iconSettingsTable);
$("body").append(mydiv);
});
});
#mydiv {
max-height: 200px;
overflow-y: scroll;
}
#iconSettingsTable {
border: 2px solid black;
}
.selectorColData {
text-align: center;
}
答案 0 :(得分:1)
JavaScript的第62行更改为position:auto https://jsfiddle.net/tonytansley/dmu5wrd0/
$(iconSettingsTable).css({"position":"auto","top":$("#iconSettingsSpan").position().top + 20,"left":0});
答案 1 :(得分:0)
因为&#34;位置:绝对&#34;该表的财产
从jquery代码中删除它(第62行)
或使用此
pngcheck.exe a.png
OK: a.png (1024x1024, 32-bit RGB+alpha, non-interlaced, 80.7%).
pngcheck.exe b.png
OK: b.png (1024x1024, 8-bit palette+trns, non-interlaced, 83.1%).
或使用此
#iconSettingsTable
{
border: 2px solid black;
position : static !important;
}
答案 2 :(得分:0)
作为更新,似乎如果我将div的位置设置为绝对,它就可以工作。我的问题是我把桌子的位置设置为绝对。这是一个更新的jsfiddle:
Link: http://jsfiddle.net/e6gayjps/5/
答案 3 :(得分:0)
首先,需要注意的是,直接在表格中设置max-height
是不可靠的:
在CSS 2.1中,'min-height'和'max-height'对表的影响, 内联表,表格单元格,表格行和行组未定义。
因此,正如您所做的那样,解决方案是将其设置为非表格式父级。
但是您的方法存在问题:您的表格有position: absolute
,因此它已从流程中取出,因此父级div
的高度为0
。即使您为其设置了明确的高度,overflow: scroll
也无效,因为
['overflow']会影响所有元素内容的剪辑 除了任何后代元素(及其各自的内容和 后代)其包含块是视口或其祖先 元素。
在您的情况下,由于表格已定位,其containing block不是父div
:
如果元素具有'position:absolute',则包含块为 由最近的祖先建立,具有'绝对'的'位置', '亲戚'或'固定'
因此,为了使其有效,您需要删除表格的position: absolute
,或将position
设置为与static
不同的div
。