2013-10-06 106 views
0

我有一个动态使用jQuery创建的表,它有许多列。我不知道桌子上会有什么,或者有多少列。根据td内部的内容,每个td将具有不同的宽度。我想要做的是获得td的宽度并在以后使用它。获取现有td元素的宽度

这是我的表可以看起来像。 http://imgur.com/80Zj7wB

正如你可以看到它有不同大小的列。所以我只想去获得每个元素的宽度。这是我的代码:

var topTds = $("#ResultSetTable tr:first"); 
topTds = topTds.children(); 
console.log(topTds); 
//for each of the tds we want to go and get their scrollwidth 
for(var m = 0; m < topTds.length; m++){ 
    console.log(topTds[m], "client: ", topTds[m].clientWidth, "offset ", topTds[m].offsetWidth, "scroll ", topTds[m].scrollWidth); 
} 

正如你可以看到我已经尝试了所有的不同宽度的东西我能想到的,但他们没有打印出正确的数量。这是我得到的结果http://imgur.com/ZavrE6r

但是,当我滚动使用铬我得到不同的数字,它的铬数是正确的。这是铬显示http://imgur.com/jO7TRr6

所以基本上我不知道我做错了什么。任何帮助将非常感激!

回答

1

当您使用jQuery时,您可以利用提供的width()方法。

for(var m = 0; m < topTds.length; m++) { 
    console.log(topTds[m], "jQuery width: ", topTds.eq(m).width()); 
} 

clientWidthoffsetWidthscrollWidth代表不同数量时,以及计算HTML元素的最终宽度可以是因为CSS属性和盒模型的相当棘手。 此外,你应该检查什么时候调用console.log,如果加载了所有CSS和JavaScript,并且表中填充了数据:这些可能是你得到的奇怪值的原因。

根据我的经验,jQuery的width()永远不会计算对象的实际宽度。

一些参考: