2012-01-13 21 views
9

Zrobiłem szybki Jsbin: http://jsbin.com/ujabew/edit#javascript,html,liveOblicz największą szerokość zestawu elementów jQuery

co próbuję osiągnąć to, aby dowiedzieć się, który jest największym <section> z 3 z linkiem. Tak więc chciałbym, aby po uruchomieniu pętli ustawić var width na największą możliwą liczbę, jaką mogłaby mieć dowolna szerokość.

kod w toku pisał w linku

+3

Insteading prostu dodanie szerokości, śledzić max szerokości znaleziono do tej pory. 'var max = 0; (jeśli this.width> max to max = this.width); 'w złym pseudo-kodzie. –

+0

@MarcB To całkiem niezły kod do pesedo. –

Odpowiedz

31

tutaj:

var maxWidth = Math.max.apply(null, $(elems).map(function() { 
    return $(this).outerWidth(true); 
}).get()); 

żywo demo:http://jsfiddle.net/rM4UG/

+0

To miło. – powerbuoy

+0

Bardzo prosta, dobra robota. – einar

+0

Niezła. Kiedy użyłem tego, było dla elementów znajdujących się wewnątrz ciała, które miały margines: auto (dla celów centrowania). Jeśli robisz coś podobnego w IE (tryb standardów), usuń prawdziwą istotę przekazaną do funkcji 'outerWidth', aby usunąć marginesy z obliczeń i jesteś złoty! –

0

wierzę chcesz zajrzeć do biblioteki underscore. W szczególności, metoda max

0
$(document).ready(function(){ 
    var maxWidth = 0; 
    $('section').each(function(){ 
    w = $(this).outerWidth(true);  
    if (w > maxWidth) 
      maxWidth = w; 
    }); 
}); 
2

Lepsze wypełnienie treścią komentarza Marc B, wykorzystując Math.max():

$(document).ready(function(){ 
    var maxWidth = 0; 
    $('.content ul li').each(function(){ 
    var itemWidth = $(this).outerWidth(true); 
    maxWidth = Math.max(maxWidth, itemWidth) 
    }); 
}); 
0

Zmienić .each() pętla do thi s:

var thisWidth = $(this).outerWidth(true); 

if (thisWidth > width) { 
    width = thisWidth; 
} 
0

To był mój pomysł

$ (document) .ready (function() {

var elements = $('.content ul li'); 
var count = elements.length -1; 
var width = [];   

elements.each(function(n){ 
    width.push($(this).outerWidth(true)); 
    if (count == n) { 

     width = Math.max.apply(Math, width); 

    } 
}); 

});

Dodałem liczbę elementów, a następnie uruchamiam Math.max, aby uzyskać największą liczbę po wykonaniu każdej pętli.

0

Właśnie napisałem funkcję dotyczącą tego. Myślałem, że to może pomóc innym. (jQuery)

$.fn.largerWidth = function() { //function(p) 
            // where 'p' can be clientWidth or offsetWidth 
            // or anything else related to width or height 
    var s = this,m; 
    for (var i = 0; i < s.length; i++) { 
     var w = s[i].offsetWidth; // s[i][p]; 
     (!m || w > m) ? (m = w) : null 
    } 
    return m; 
} 
Powiązane problemy