2010-06-17 26 views
8

Aşağıdaki gibi bir standart UL'ye sahibim:Tüm liste öğelerinin toplam genişliğini hesaplamak?

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

Tüm LI etiketleriyle birlikte hesaplamak için hızlı bir & verimli bir yol bulmaya çalışıyorum. Şu anda var:

var width = 0; 

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

Sadece bir döngü kullanmadan aynı sonucu elde etmek için daha hızlı bir yol olup olmadığını merak ediyorum?

Yardımlarınız için teşekkürler!

cevap

4

'u tam olarak almak için sonra ne var, yok yok. Bu sadece mevcut işlevlerle iyi uyuşan bir durum değil, sahip olduğunuz gibi bir döngü en hızlı yoldur. Orada çekirdek içine bir .childWidth() falan koyma konuşmak ... ama bu genellikle sonra konum değil ne, ekstra alan da dahil olmak üzere ebeveynin genişliğini yer alacağını nefesimi :)

diğer cevaplar tutmazlar Şimdilik, şu anki gibi ... Eklenecek daha kısa olan herhangi bir şey, hemen hemen her zaman, aynı miktarda iş (muhtemelen aynı kod) da garantilidir.

+0

Ah tamam, bunun için teşekkürler - .childWidth() istediğim gibi geliyor - nevermind! – Fred

0

Sen ül elemanın kendisi genişliğini alabilir, ama bu sana mermi ve marjlar dahil genişliği verecekti: Bu bir menü ve ürün yan yana iseniz

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

Li'nin –

0

(ve aşağıda değil), $('ul').outerWidth()'u deneyin.

[DÜZENLE] ul genişliği sabitse, listenin son öğesini bulun ve sağ ofsetine bakın. Ofset her zaman ana öğeye göre olduğundan, tek yapmanız gereken tüm çocukların toplam genişliğini almak için offsetLeft ve offsetWidth eklemektir.

+0

üzerinde bir floatınız varsa işe yaramayın Maalesef, UL, tüm liste öğelerinin toplamından daha büyük bir sabit genişliğe sahip. – Fred

+0

Bu durumda, listedeki son öğenin doğru ofsetine bakmanız yeterlidir. –