2009-05-13 5 views
0

У меня возникли проблемы с итерацией и получением значений width().JQuery width() через итерацию?

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

);

поэтому для каждого элемента «MyClass» я хотел бы найти ширину (некоторые разные).

Но приведенный выше код генерирует только ширину() первого экземпляра MyClass и возвращает 0 после этого.

Любые идеи о возможности получения ширины каждого экземпляра MyClass?

+0

В ответ на ваш комментарий к ТМ, мы должны смотреть на ваш HTML (и, вероятно, CSS), чтобы решить проблему. Укажите код, необходимый для дублирования проблемы (или размещайте ее на http://jsbin.com), чтобы мы могли вам помочь. – brianpeiris

ответ

4

Использование map вместо each, чтобы упростить код:

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

Спасибо вам обоим вам :) – 2009-05-13 05:03:03

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

Должно работать нормально. Если бы вы показали немного больше кода, я мог бы понять, что происходит не так.

Update:

Когда вы используете этот метод? Вы ждете, пока DOM не будет готов или просто сразу его выполнит? Если нет, браузер не может быть сделан показ всех этих элементов.

Попробуйте это, если вы еще не:

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

К сожалению, это не помогло. Их не намного больше для моего кода - у меня есть пара примерно 20 экземпляров MyClass на странице (некоторые с разной шириной), и я хотел бы получить их ширину. Хотя этот метод, безусловно, подтолкнул начальное значение ширины в массив - последующие значения были равны 0. Я проверил это путем переключения width() с текстом() - text() выводит исходное содержимое из каждого класса; Параметр width, с другой стороны, просто не успевает определить первое значение. Славик. – 2009-05-13 04:36:31

+0

Вы запускаете это сразу на странице или дожидаетесь загрузки DOM? См. Обновление, которое я только что сделал для своего ответа. –