考虑以下 jsFiddle - http://jsfiddle.net/mark69_fnd/rcCeG/17/
虽然它使用了 YUI,但代码应该很清楚:
YUI().use('node', function (Y){
var td = Y.one('#replaceMe'),
newTd = Y.Node.create('<td><input/></td>'),
w = td.getDOMNode().getBoundingClientRect().width,
inputNode = newTd.one('input');
w -= parseFloat(td.getComputedStyle('paddingLeft')) || 0;
w -= parseFloat(td.getComputedStyle('paddingRight')) || 0;
w -= 2 * parseFloat(td.getComputedStyle('borderWidth')) || 0;
newTd.setStyle('width', w + 'px');
w -= 2 * parseFloat(inputNode.getComputedStyle('borderWidth')) || 0;
inputNode.setStyle('width', w + 'px');
td.replace(newTd);
});
它所做的是将给定表格中的一个单元格替换为另一个包含输入框的单元格。
现在,我必须执行一些宽度计算才能让替换保留表格大小。特别困扰我的是,我必须明确设置输入的宽度,即使它在 CSS 中设置为 100%:
table, td, th {
border: solid 1px black;
}
table td, table th {
padding: 2px;
}
input {
border: 1px solid #cbcbcb;
background-color: #FFFEBB;
width: 100%;
height: 100%;
}
如果我不设置它,那么它看起来很丑 - 不尊重正确的填充,我不明白为什么。
请告诉我在保留表格大小的同时用另一个单元格替换一个单元格的正确方法。