2017-10-20 1 views
0

Ich habe ein paar Elemente mit unterschiedlicher Breite. Ich muss jede Schleife durchlaufen, finde die Breite der breitesten und setze alle auf diese Breite.Setzen Sie alle Elemente auf die Breite der breitesten in Set

<div id="mySet"> 
    <span>some content</span> 
    <span>more content</span> 
    <span>here content</span> 
</div> 

JS:

var widest = 0; 

$("#mySet span").each(function(){ 
    var this = $(this), 
     wdth = this.width(); 

    if(wdth > widest){ 
     widest = wdth; 

     $("#mySet span").each(function(){ 
      $(this).width(widest); 
     }); 
    } 

}); 

Ich glaube, ich die maximale Breite bekommen kann, aber muss ich jedes Mal, Schleife, um die Breite zu jedem Element zugeordnet werden. Scheint wie zu viele Schleifen.

Antwort

1

Alternativen zum Looping das breiteste zu bekommen:

// Using modern JavaScript: 
const widest = Math.max(...$("#mySet span").map((i, span) => $(span).width())); 

// Using older JavaScript: 
var widest = Math.max.apply(
    null, 
    $("#mySet span").map(function() { 
    return $(this).width(); 
    }) 
); 

Und dann $("#mySet span").width(widest); setzen die Breiten aller Spannweiten in einem Rutsch.

+0

Was macht die Ellipse? – santa

+1

In diesem Fall nimmt es jede Breite in dem von map zurückgegebenen Array und übergibt jede als separate Argumente an die max-Funktion – searlea

2

einzustellen Breite an alle span, man muss nur

$("#mySet span").width(widest); 

und dies wird auf alle Breite eingestellt. Stellen Sie es also außerhalb der Schleife und am Ende.

Verwandte Themen