2010-06-17 9 views
8

Ich habe einen Standard UL wie folgt:Berechnung der Gesamtbreite aller Listenelemente?

<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> 

ich eine schnelle & effiziente Art und Weise zu finden versuche, die kombiniert zu berechnen mit aller LI-Tags. Zur Zeit habe ich:

var width = 0; 

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

Ich frage mich nur, wenn es ein schneller Weg ist, ohne die Verwendung einer Schleife um das gleiche Ergebnis zu erhalten?

Danke für Ihre Hilfe!

Antwort

4

Um genau, was Sie nach, nicht gibt es nicht. Dies ist kein Fall, der gut zu bestehenden Funktionen passt, eine Schleife, wie Sie sie haben, ist der schnellste Weg. Es ist die Rede ein .childWidth() oder etwas in den Kern des Setzens ... aber ich würde nicht meinen Atem halten :)

Die anderen Antworten der Eltern Breite einschließlich zusätzlichen Platz würde, das ist in der Regel nicht, was Sie nach , also für jetzt ... bleib bei der Schleife, wie du es getan hast. Alles, was kürzer ist, wird fast garantiert die gleiche Menge an Arbeit (möglicherweise identisch Code) auch darunter.

+0

Ah okay, danke dafür - .childWidth() klingt nach dem, was ich mir gewünscht hätte - vergiss es! – Fred

0

Sie könnten die Breite des ul-Element erhalten selbst, aber das würde Ihnen die Breite einschließlich den Kugeln und Margen:

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

werden nicht funktionieren, wenn Sie einen Schwimmer auf dem –

0

Wenn dies ein Menü ist und die Einzelteile sind nebeneinander (und nicht unten), versuchen Sie $('ul').outerWidth().

[EDIT] Wenn die Breite des ul fest ist, dann suchen Sie das letzte Element der Liste und schauen Sie sich den richtigen Offset an. Da Offset immer relativ zum übergeordneten Elemente ist, alles, was Sie tun müssen, ist offsetLeft und offsetWidth hinzuzufügen, um die Gesamtbreite aller Kinder zu bekommen.

+0

Leider Li, nicht erwähnt, hat die UL eine feste Breite, die größer ist als die Summe aller Listenelemente ist. – Fred

+0

In diesem Fall sehen Sie sich einfach den rechten Versatz des letzten Elements in der Liste an. –