【发布时间】:2020-09-30 07:43:23
【问题描述】:
我之前曾两次问过这个问题([1]、[2])并得到了一些很好的答案,但没有一个是我想要的。
情况:我有一张表格,其中一列的单元格是contentEditable。 问题:可编辑区域没有到达单元格的所有边缘。相反,在可编辑部分下方有一个不可编辑区域的薄填充 (5px)。我希望保留 5px 的空间,但也希望它是可编辑的(即我喜欢尺寸,但不喜欢它的不可编辑方面)。
我已经知道 JavaScript 允许 document.getElementById("id").contentEditable = true; 属性执行此操作。事实上,我更喜欢使用这种方法(如果有方法,请告诉我)! 但是,我故意尝试在单元格的一端设置一个不可编辑的单元,使用<span>,当我需要单元格执行功能时(例如,当添加数字总和时,单元被解析为整数,输出变为 NaN) .
从视觉上看,我正在寻找的是这个模型中所示的内容:
下面是不必要的填充(除了右侧)的可视化表示,以红色显示(我更改了 CSS 中的颜色只是为了让它在此处可见)。需要明确的是,我仍然喜欢单元格的尺寸,但我想让单元格的整个区域可编辑,除了文本“kg”所在的位置。此外,“kg”右侧的红色区域不是不必要的填充,它应该保持不可编辑。
另外,这是我目前的代码:
function myFunction() {
var jack = document.getElementById("jack").innerText;
var john = document.getElementById("john").innerText;
var joe = document.getElementById("joe").innerText;
var total = parseInt(jack) + parseInt(john) + parseInt(joe);
document.getElementById("total").innerHTML = total;
}
myFunction();
* {
box-sizing: border-box;
}
table {
width: 100%;
}
table,
tr,
th,
td {
background-color: #fff;
border: 1px solid black;
border-collapse: collapse;
font-family: Arial, sans-serif;
}
td:last-child {
display: flex;
justify-content: space-between;
align-items: center;
border: none;
}
td:last-child,
span:first-child {
flex-grow: 1;
margin-right: 10px;
outline: none;
text-align: right;
}
.cell {
height: 30px;
}
#total {
display: flex;
justify-content: flex-end;
}
<table>
<thead>
<tr class="cell">
<th>Person</th>
<th>Weight</th>
</tr>
</thead>
<tbody>
<tr class="cell">
<td>Jack</td>
<td id="jack" oninput="myFunction()">
<span contentEditable="true">4000</span>
<span>kg</span>
</td>
</tr>
<tr class="cell">
<td>John</td>
<td id="john" oninput="myFunction()">
<span contentEditable="true">200</span>
<span>kg</span>
</td>
</tr>
<tr class="cell">
<td>Joe</td>
<td id="joe" oninput="myFunction()">
<span contentEditable="true">3</span>
<span>kg</span>
</td>
</tr>
<tr class="cell">
<td>Total</td>
<td>
<span id="total"></span>
<span>kg</span>
</td>
</tr>
</tbody>
</table>
如您所见,在右列单元格的角落/边缘,顶部、底部和左侧大约有 5 像素的不可编辑空间。 有没有办法让这个特定的部分在没有接收单元右侧(单位所在)单位的函数的情况下可编辑?
非常感谢任何帮助!
【问题讨论】:
-
为什么我在 CSS 中看不到
padding:0;?也可以使用*{ box-sizing:border-box; }。 -
啊,我忘了我把那个放在那里了。我最终从您的评论中得到了这个问题的答案,我只需要删除填充并将单元格的
height:属性设置为30px。如果您想回答这个问题,我很乐意将您的问题标记为答案。但是,box-sizing: border-box做了什么? -
box-sizing:border-box;使边框和内边距成为元素宽度和高度的一部分,因此如果您更改边框或内边距,则无需重构。
标签: javascript html css