было бы полезно, если бы вы опубликовали более полный пример, включающий разметку, которая встраивает ваше изображение в исходный документ;но, сделав несколько разумных предположений, я думаю, что вам просто нужно что-то вроде следующего ...
при условии, что ваша разметка выглядит примерно так:
<div id="ci">
<img src="/stickyImage" />
</div>
, тогда следующий JS должен сделать свое дело:
$("#ci").click(function(){
$("img",this).remove();
$(this).html('<img src="/stickyImage" />');
return false;
});
удачи.
[править] Если вы используете этот код для загрузки изображения, которое динамически генерируется на вашем сервере (или которое может периодически изменяться, дляпо какой-то причине), вы также должны быть уверены, что браузер правильно учитывает склонность браузера кешировать данные, которые он считает статичными.Это обычно выполняется двумя способами (любой из них будет работать):
1) гарантирует, что URL всегда будет отличаться при каждой загрузке изображения.Вы можете сделать это легко, просто добавив случайное число к части строки запроса URL-адреса изображения.Таким образом, в приведенном выше примере $(this).html('<img src="/stickyImage" />')
станет $(this).html('<img src="/stickyImage?"+(new Date().getTime()) />')
.(Это по сути идентично подходу, на котором в конечном итоге остановился OP - см. Изменения OP выше).
2) убедитесь, что сервер возвращает данные изображения, включая надлежащие заголовки HTTP в ответе, чтобы указать, чтоизображение является динамическим и не должно кэшироваться.Вы можете увидеть более подробную информацию о том, как отправлять заголовки без кэширования в этом сообщении SO .
Вот как вы можете установить необходимые заголовки из сервлета Java:
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setDateHeader("Expires", 0); // Proxies.
Вариант № 2, возможно, является более "технически правильным" способом решения проблемы кэширования, но, как яСказанное выше - либо сработает, и вариант № 1 является очень надежным подходом, который зачастую существенно проще, чем вариант № 2.
Все это, как говорится, - проблема кэширования является отдельной проблемой от первоначального вопроса, который былспросил здесь.Первоначальный вопрос касался отображения встроенных двоичных объектов в HTML.Эта проблема возникла из-за неправильного использования функции jquery load()
.ОП основывается на подходе, который использует функцию attr()
для установки атрибута src
.Подход, который я показал, включает создание нового элемента img
и удаление старого элемента.Любой из этих подходов будет работать, но функция load()
не будет работать для этой цели.