jquery - 确切的列宽
问题描述
我尝试使用 jQuery 构建一个表。该表应具有精确宽度的列。
假设第一列的宽度应该正好是 100 像素,包括填充(每边 10 像素)。我尝试了许多函数width()
和的组合innerWidth()
,但我将描述两种尝试:
我创建 td 和 set
td1.width(100);
。然后函数td1.width()
返回 120 像素,函数td1.innerWidth()
返回 140 像素。根据 Firefox 控制台的列宽是 140 像素。我创建 td 和 set
td1.innerWidth(100);
。然后函数td1.width()
返回 100 像素,函数td1.innerWidth()
返回 120 像素。根据 Firefox 控制台的列宽是 120 像素。
为什么函数td1.width(100);
以如此奇怪的方式工作?
但主要问题是:是否有可能获得宽度为 100 像素的列?那么设置真正包含填充的宽度?
.js 文件
var bodyTable = $("<table>");
var body = $("<tbody>");
var tr1 = $("<tr>");
var tr2 = $("<tr>");
$("#testTable").append(bodyTable);
bodyTable.append(body);
body.append(tr1);
body.append(tr2);
var td1 = $("<td>foo</td>");
var td2 = $("<td>foo</td>");
var td3 = $("<td>foo</td>");
var td4 = $("<td>foo</td>");
var td5 = $("<td>foo</td>");
var td6 = $("<td>foo</td>");
tr1.append(td1);
tr1.append(td2);
tr1.append(td3);
tr2.append(td4);
tr2.append(td5);
tr2.append(td6);
td1.width(100);
console.log(td1.width(), td1.innerWidth()); //Result: 120 140
td1.innerWidth(100);
console.log(td1.width(), td1.innerWidth()); //Result: 100 120
.css 文件
#testTable td {
padding:10px;
}
.html 文件
<div id="testTable"></div>
解决方案
内部宽度的名称可能会让您感到困惑,但实际上,内部宽度是width + padding。你周围有 100px 宽度 + 10px 填充,这使得它的总宽度为 120px(100+10left+10right)。
这张图片是每个宽度,内部宽度等的完整指南......意味着什么。
现在,在我的代码片段中,您会看到我创建了一个宽度为 100 像素的红色框,而蓝色的框位于红色框中,红色框的填充为 10 像素。但蓝色框仍然是 100 像素,因为红色框变成了 120 像素。还要注意蓝色框没有填充,所以 innerWidth 和 width 都是 100px。
$( document ).ready(function() {
$(".reddims").append("<p>inner width: " + $(".red").innerWidth() + "</p>");
$(".reddims").append("<p>width: " + $(".red").width() + "</p>");
$(".bluedims").append("<p>inner width: " + $(".blue").innerWidth() + "</p>");
$(".bluedims").append("<p>width: " + $(".blue").width() + "</p>");
$(".bluedims").append("<p>Because Blue doesn't have paddings.</p>");
});
.red {
width: 100px;
height: 100px;
padding: 10px;
background-color: red;
}
.blue{
background-color: blue;
width: 100%;
height: 100%
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="red">
<div class="blue">
</div>
</div>
<div class="reddims">
<p>Red Dimensions are: </p>
</div>
<div class="bluedims">
<p>Blue Dimensions are: <p>
</div>
但最后对于您的情况,您可以这样做。并随心所欲地进行设计。这将使您在设计方面有更多的自由。
var td1 = $("<td class='td1'>foo</td>");
var td2 = $("<td class='td2'>foo</td>");
var td3 = $("<td class='td3'>foo</td>");
var td4 = $("<td class='td4'>foo</td>");
var td5 = $("<td class='td5'>foo</td>");
var td6 = $("<td class='td6'>foo</td>");
我希望这能解释你的问题。
图片来源: https ://www.w3schools.com/jquery/jquery_dimensions.asp
推荐阅读
- c# - 将 EF6 和 EFCore 实体转换为单个接口?
- laravel - 不能在 where 子句中使用 selectRaw 元素
- ios - 带有 ios-charts 库的 Swift,如何在 BarChart 中设置条形上方图标的大小?
- java - 休眠中的一对多映射与继承
- bash - bash“set -o verbose”的powershell等价物是什么?
- tensorflow - Tensorflow LSTM,每次出现单个值时预测 5 个值
- c# - 从派生类到基类 C# 的指针
- go - 如何使用反射设置切片接口值
- fortran - Fortran 错误 LNK2019 - 函数 MAIN_ 中引用的未解析外部符号 D_ZANLY
- excel - Excell VBA Shell 命令不起作用,但它可以从 Windows 命令窗口工作