У меня есть изображения на моей странице.Пользователь может добавить больше изображений на страницу, нажав кнопку.Новые изображения добавляются асинхронно.Первоначально каждое изображение на странице использует специальный класс, который будет использоваться при загрузке изображения.После загрузки изображения этот класс удаляется.Каждое загружаемое изображение имеет класс imageLoading :
<img class="imageLoading" scr="someimage.png">
После загрузки этих изображений я удаляю этот класс (упрощенный код без подробностей):
$('img.imageLoading')
.each(function(){ $(this)
.load(function(){ $(this)
.removeClass('imageLoading');
});});
Визуально я вижу, что стиль удален.Но когда я снова запускаю запрос:
$('img.imageLoading')
, через отладку я вижу, что возвращаются все изображения, а не только загружаемые, т.е. это работает так, как будто я не удалил класс для изображений, которые уже былизагружен.Я заглянул в исходный код страницы и увидел, что на самом деле в HTML класс не был удален, хотя вызывался метод removeClass ().
Это поведение, в соответствии с которым все визуальные изменения применяются, кроме атрибута классане удаляется в коде HTML?Если так, то как это можно обойти в этом случае.Или, возможно, я что-то упустил.
UPD Исходный код
Я еще не решил проблему, поэтому опубликуйте некоторый код, чтобы показать, как это работает и гдепроблема есть.Мой код работает так (неважные детали удалены):
Загрузка изображений обрабатывается:
после загрузки страницы:
<script type="text/javascript">
$(function() { processLoadingImages(); })
</script>
после асинхронного вызова:
function onRequestComplete(result) {
var div = document.createElement('div');
div.innerHTML = result;
document.getElementById('images').appendChild(div);
processLoadingImages();
}
Обработка изображений с помощью processLoadingImages function:
function processLoadingImages() {
$('img.loadingImage').each(function() {
if (!imageLoaded($(this)[0])) {
$(this).hide()
.load(function() {
removeImageLoadingClasses(this);
$(this).fadeIn();
});
}
else {
removeImageLoadingClasses(this);
}
});
}
function removeImageLoadingClasses(jqueryObj) {
jqueryObj.removeClass('loadingImage');
jqueryObj.parents('div').removeClass('loadingImageContainer');
}
function imageLoaded(img) {
if (!img.complete)
return false;
if (typeof img.naturalWidth != 'undefined' && img.naturalWidth == 0)
return false;
return true;
}
Как видите, для каждого изображения есть контейнер divс классом, который удаляется для загруженных изображений.Как я проверил, что запрос повторяет все изображения, даже те, для которых вызывается removeClass?Я отладил функцию imageLoaded (см. Выше), и она всегда вызывается для всех изображений.