2015-08-12 3 views
2

Я работал над скриптом, который изменяет размер изображений в соответствии с размером контейнера. Я записал следующий код:JQuery переменная в функции странное поведение

$(function() { 
    $('.postbody .content img').each(function() { 
     var containerWidth = $(this).parent().width(); 
     if ($(this).width() > containerWidth) { 
      $(this).width(containerWidth); 
      $(this).wrap('<a href="' + $(this).attr('src') + '" target="_blank"></a>'); 
     } 
    }); 
}); 

Но он работал только для первого элемента в цикле. С моим предыдущим опытом с вопросами после назначения методов JQuery переменного я изменил код немного:

$(function(){ 
    $('.postbody .content img').each(function() { 
     if ($(this).width() > $(this).parent().width()) { 
      $(this).width($(this).parent().width()); 
      $(this).wrap('<a href="'+$(this).attr('src')+'" target="_blank"></a>'); 
     } 
    }); 
}); 

И теперь он работает отлично. Но я не могу понять, как это сделать. Должна ли переменная containerWidth получать новое значение при каждом вызове функции каждым циклом?

EDIT: Обратите внимание, что все контейнеры равного размера.

+0

Да, он будет обновлен. Но не если этот конкретный код работает до загрузки страницы. –

+0

он должен работать, можете ли вы создать проблему в демонстрации .. только вам придется подождать, пока изображение загрузится. –

+1

http://jsfiddle.net/arunpjohny/594e3ghn/ –

ответ

2

Попробуйте это,

$(function() { 
    $('.postbody .content').each(function() { 
     var containerWidth = $(this).width(); 
     var img = $(this).find("img"); 
     if (img.width() > containerWidth) { 
      img.width(containerWidth); 
      img.wrap('<a href="' + img.attr('src') + '" target="_blank"></a>'); 
     } 
    }); 
}); 

Или Вы можете выполнить ту же операцию просто с помощью CSS

просто сделать IMG тег макс ширину до 100%

Ex.

img { 
    max-width: 100%; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^