我有一个HTML表格,其中某些单元格有很长的文本内容.
我想使用jQuery为这些单元格指定宽度(以像素为单位),但渲染表只是忽略给定的宽度.
有没有办法迫使表格尊重这个宽度?
谢谢!
JSFiddle:http://jsfiddle.net/sangil/6hejy/35/
(如果检查单元格,则可以看到计算出的宽度与元素样式宽度不同)
HTML:
<div id="tblcont" class="tblcont">
<table id="pivot_table">
<tbody>
<tr>
<th id="h0" >product</th>
<th id="h1" >price</th>
<th id="h2" >change</th>
</tr>
<tr>
<!-- this is the cell causing trouble -->
<td id="c00" >Acer 2400 aaaaaaaaaaaaaaaaaaaaaaaaaa</td>
<td id="c01" >3212</td>
<td id="c02" >219</td>
</tr>
<tr>
<td id="c10" >Acer</td>
<td id="c11" >3821</td>
<td id="c12" >206</td>
</tr>
</tbody>
</table>
</div>
Run Code Online (Sandbox Code Playgroud)
CSS:
.tblcont {
overflow: hidden;
width: 500px;
}
table {
table-layout: fixed;
border-collapse: collapse;
overflow-x: scroll;
border-spacing:0;
width: 100%;
}
th, td {
overflow: hidden;
text-overflow: ellipsis;
word-wrap: break-word;
}
th {
height: 50px;
}
Run Code Online (Sandbox Code Playgroud)
使用Javascript:
$(document).ready(function() {
// THIS LINE HAS NO EFFECT!
$('#c00').width(30);
});?
Run Code Online (Sandbox Code Playgroud)
我可以从你的小提琴中看到,你已经很好地掌握了如何截断这样的字段.我认为您可能会发现执行以下操作很有用:
<table>
<colgroup>
<col style="width: 30px;" /> <!-- this style affects the whole 1st column -->
<col />
<col />
</colgroup>
<!-- the rest of your table here -->
</table>
Run Code Online (Sandbox Code Playgroud)
此方法以符合标准的方式与HTML规范一起使用 - 并将调整整个列的大小.如果您改为display将单元格更改为inline-block,如上所述,将会发生的情况是您将单元格从表格流中取出 - 其他样式更改可能会停止工作.
通过col使用上面的代码设置整个样式,您可以使用table元素的table-layout: fixed样式来代替您.
另外 - 我注意到你已经设置了单元格使用在quirksmode上text-overflow: ellipsis;查看这篇文章以了解它为什么不起作用.您需要的修复是进行以下编辑:
th, td {
border: solid #4682B4 1px;
overflow: hidden;
text-overflow: ellipsis;
word-wrap: break-word;
text-align: center;
white-space: nowrap; /* Add this line */
}
Run Code Online (Sandbox Code Playgroud)
小智 6
表格单元格默认适合其内容并忽略您的宽度.
已提供答案的其他可能性:
用其他容器包围文本:
<td id="c00" ><div>Acer 2400 aaaaaaaaaaaaaaaaaaaaaaaaaa</div></td>
Run Code Online (Sandbox Code Playgroud)
并改变其宽度:
$('#c00 div').width(30);
Run Code Online (Sandbox Code Playgroud)