2010-06-17 58 views
8

我有一个标准UL如下:计算所有列表项目的总宽度?

<ul> 
    <li><a href="">Link</a></li> 
    <li><a href="">Link</a></li> 
    <li><a href="">Link</a></li> 
    <li><a href="">Link</a></li> 
    <li><a href="">Link</a></li> 
</ul> 

我试图找到一个快速&有效的方式来计算所有的LI标签的结合。目前我有:

var width = 0; 

$('ul li').each(function() { 
width += $(this).outerWidth(); 
}); 

我只是想知道是否有一个更快的方式来获得相同的结果,而不使用循环?

感谢您的帮助!

回答

4

得到究竟是你在追求什么,不是没有。这不是一个适合现有功能的情况,像你这样的循环是最快的方式。有把一个.childWidth()或东西放到核心的谈话......但我不认为我的呼吸:)

其他的答案将包括包括额外的空间父母的宽度,这是通常不是你以后在做什么,所以现在...像你一样坚持循环。无论如何,任何更短的将被添加的东西都将保证做相同数量的工作(可能相同的代码)。

+0

啊好的,谢谢 - .childWidth()听起来像我想要的 - 没关系! – Fred 2010-06-17 11:43:30

0

你可以得到UI元素本身的宽度,但会给你包括子弹和利润宽度

var width = $("ul").outerWidth(); 
+0

如果你在锂电池上有浮子,那么就不能工作 – 2013-01-26 19:24:23

0

如果这是一个菜单项是彼此相邻(而不是下面),请尝试$('ul').outerWidth()

[编辑]如果ul的宽度是固定的,那么找到列表的最后一个元素,并看看它的右偏移量。由于偏移总是相对于父元素,所以您只需添加offsetLeftoffsetWidth即可获得所有子元素的总宽度。

+0

对不起,没有提到,UL的固定宽度大于所有列表项的总和。 – Fred 2010-06-17 11:42:58

+0

在这种情况下,只需查看列表中最后一个元素的右侧偏移量即可。 – 2010-06-21 07:21:20