У меня есть изображение svg, сохраненное на s3.Я встраиваю его в веб-страницу с помощью тега object
, вот так.
<object
type="image/svg+xml"
data="https://bucket.actual_url_to_amazon_s3_bucket"
id="graph-svg"></object>
Пока все красиво и просто.Теперь иногда пользователь вносит изменения, и я хочу показать им другой svg.Я хочу просто обновить источник тега объекта, так же, как я мог бы использовать тег img
.
Хотя это технически работает, и новый svg загружен, у меня возникают странные проблемы с рендерингом - размер svg неверен и усечен.Я обнаружил, что если я удаляю тег объекта из DOM, затем обновляю данные, а затем добавляю его обратно в DOM, он хорошо отображается.
html:
<div id="svgcont">
<object
type="image/svg+xml"
data="https://bucket.actual_url_to_amazon_s3_bucket.svg"
id="graph-svg"></object>
</div>
js:
// make an api call to get the new svg url and then:
var ob = $("#graph-svg").remove();
ob.attr("data", newSVGurl);
$("#svgcont").prepend(ob);
Если я сделаю выше, я получу svg, отображаемую так, как мне нравится.Но просто прямой вызов
ob.attr("data", newSVGurl)
Есть ли способ напрямую сказать объекту "обновить исходные данные", или заставить его выполнить рендеринг или что-то еще, когда он вставляется в DOM, без фактического удаленияэто и затем вставка заново?
Проблема с удалением состоит в том, что это выглядит странно и нервно, и это заставляет изображение мигать, и другие элементы на странице немного перепрыгивают.Поэтому я надеюсь на что-то, что выглядит более плавным и менее похожим на глюк.