2009-08-05 4 views
2

Comment puis-je trouver l'élément le plus large (largeur définie dans css ou en tant qu'attribut) sur une page Web à l'aide de jQuery?jQuery - élément le plus large sur la page

+0

Whoa, chose la plus large avec la largeur _explicitly_ ensemble? – jason

+0

cette largeur? écran de la fenêtre de document de corps –

Répondre

8

ne sera pas rapide, mais devrait faire l'affaire

var widest = null; 
$("*").each(function() { 
    if (widest == null) 
    widest = $(this); 
    else 
    if ($(this).width() > widest.width()) 
    widest = $(this); 
}); 

cela devrait faire l'affaire

cette version pourrait être un peu plus rapide (mais certainement pas clienat):

var widest = null; 
// remember the width of the "widest" element - probably faster than calling .width() 
var widestWidth = 0; 
$("*").each(function() { 
    if (widest == null) 
    { 
    widest = $(this); 
    widestWidth = $(this).width(); 
    } 
    else 
    if ($(this).width() > widestWidth) { 
    widest = $(this); 
    widestWidth = $(this).width(); 
    } 
}); 

I vous suggérons également de limiter le type de nœuds que vous traversez (c'est-à-dire utiliser div au lieu de *)

+1

Peut vouloir vérifier outerWidth() si nécessaire. – Martin

+0

faites attention à la longueur du DOM. cet appel peut être coûteux. –

+0

Ca a du sens, j'imagine que j'espérais espérer une sorte de fonction max. – Jeremy

2

G répondez répondre Niko!

Je me suis basé sur cela légèrement pour ne montrer que les éléments de la page qui sont visibles, parce que parfois il retournera des éléments qui ont un grand ensemble de largeur mais peuvent avoir l'affichage: aucun ensemble par exemple;

var widest = null; 

$("*").each(function() { 
    if (widest === null && $(this).is(':visible')) { 
     widest = $(this); 
    } else if ($(this).is(':visible') && $(this).width() > widest.width()) { 
     widest = $(this); 
    } 
}); 
Questions connexes