JQuery - 每次单击表都会更改单元格宽度

时间:2016-06-30 12:12:44

标签: javascript jquery html css

我对表格单元格的宽度有一些奇怪的问题。我尝试做的就是使用.width()函数获取表格单元格的宽度,然后在width属性中的同一单元格上设置该宽度:

$table.find('tr:first td').each(function () {
    var actualWidth = $(this).width();
    $(this).attr("width", actualWidth);
});

每次我这样做时,它会为某些单元格获得不同的宽度(通常会减少一个并增加另一个单元格)。

我在2012年看到了类似的问题:jQuery width() returning incorrect values on table cells 但它已经很老了,而且接受的答案似乎无法奏效。

小提琴:https://jsfiddle.net/awolf/40pj1b2u/

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

我认为其中有两个问题。所有都与表格单元格显示有关。

  1. 使用border属性(border =“1”) <table>可能会在读取时弄乱宽度值。设置attr('width')值时可能相同。为了匹配最接近的实际值,您可以使用 innerWidth()作为@Adam P建议。

  2. 表格单元格宽度取决于完整的可用表格宽度。在您的jsfiddle示例中,当扩展表区域时,单元格的宽度会增加。因此,从每个单元格宽度,您可以计算全局表格宽度,并应用它。

  3. 通过JS调整,看看你的https://jsfiddle.net/piiantom/72dvm0v4/。 表边框可以改变,JS仍然可以工作

答案 1 :(得分:0)

我认为这是一个错误。 我的解释:  读取宽度时,它会获得内容宽度。  设置时,框会被渲染,然后边框设置(每次从内容中获取1px)。 与.attr(),. prop()和.width()相同。

看一下box-sizing,.innerWidth()和.outerWidth()!