2009-05-13 4 views
0

Ich habe ein wenig Mühe beim Iterieren und Abrufen von width() - Werten.Jquery width() bis Iteration?

$(".MyClass").each( 
function(){ 
    elemWidth=$(this).width(); 
} 

);

so für jedes "MyClass" -Element möchte ich die Breite finden (einige sind unterschiedlich).

Aber der obige Code erzeugt nur die Breite() der ersten Instanz von MyClass und gibt danach Nullen zurück.

Irgendwelche Ideen, um die Breite jeder Instanz von MyClass zu erhalten?

+0

zu TM auf Ihren Kommentar reagieren, würden wir Ihnen suchen müssen HTML (und wahrscheinlich CSS), um das Problem zu lösen. Bitte geben Sie den notwendigen Code ein, um das Problem zu reproduzieren (oder hosten Sie es auf http://jsbin.com), damit wir Ihnen helfen können. – brianpeiris

Antwort

4

Verwenden map statt each Ihren Code vereinfachen:

$('.MyClass').map(function() { 
    return $(this).width(); 
}); 
+0

Danke - an euch beide :) –

2
var widths = []; 
$('.MyClass').each(function() { 
    widths.push($(this).width()); 
}); 

Sollte gut funktionieren. Wenn Sie etwas mehr Code gezeigt haben, könnte ich herausfinden, was falsch läuft.

Update:

Wenn laufen Sie diese Methode? Warten Sie, bis das DOM bereit ist, oder führen Sie es sofort aus? Wenn nicht, kann der Browser möglicherweise noch nicht alle diese Elemente rendern.

die Sie interessieren, wenn Sie nicht bereits:

var widths = []; 
$(document).ready(function() { 
    $('.MyClass').each(function() { 
     widths.push($(this).width()); 
    }); 
}); 
+0

leider hat das nicht den Trick gemacht. Sie sind nicht viel mehr zu meinem Code - ich habe ein paar 20 Instanzen von MyClass auf der Seite (einige mit verschiedenen Breiten) und ich möchte die Breite von jedem bekommen. Während diese Methode sicherlich den anfänglichen Wert der Breite in das Array schob - die nachfolgenden Werte waren alle 0. Ich überprüfte dies, indem ich width() mit text() änderte - text() gibt den ursprünglichen Inhalt jeder Klasse aus; die Breite param wird andererseits einfach nicht über den ersten Wert hinausgehen. Danke Slavik. –

+0

Führen Sie dies sofort auf der Seite aus oder warten Sie, bis das DOM geladen ist? Siehe das Update, das ich gerade zu meiner Antwort gemacht habe. –