@Nevea

Вставка SVG-Sprite не затрагивая Dom?

Добрый день, у меня такая проблема, я вставляю в html страницу сгенерированный SVG-Sprite с помощью внешнего файла js (чтобы этот спрайт кешировался на стороне клиента) с содержимым:
$("body").append('<svg> <symbol id="test">..</symbol ></svg>');

Вывожу на экран иконку через
<use xlink:href="#test">
Так все замечательно работает и отображается,но спрайт большой и при вставке увеличивается общее число узлов DOM , это сказывается на производительности. В итоге встал вопрос как оптимизировать,
идея была вставлять в shadow dom, с помощью
var root = elem.attachShadow(mode:open); 
  root.innerHTML = "<svg> <symbol id="test">..</symbol ></svg>";

спрайт вставляется в shadow dom и вконсоле разработчика видно,
но я не могу обратиться к элементу id="test" и соответственно вставить иконку через use,
так же была идея вставлять через тег
<template id="svg-sprite">
<svg> <symbol id="test">..</symbol ></svg>
</template>
,но к сожалению опять не могу обратиться к id="test". Подскажите куда копать и какие есть идеи на этот счет.
Заранее благодарен
  • Вопрос задан
  • 741 просмотр
Решения вопроса 1
SmthTo
@SmthTo Куратор тега HTML
Все перепёлки мира будут оплакивать мою смерть.
Вызывайте иконку из внешнего файла спрайта на сервере:
<svg xmlns="http://www.w3.org/2000/svg">
    <!-- путь до файла спрайта + ID нужной иконки в нем -->
    <use xlink:href=assets/sprite.svg#sprite-icon-1"></use>
</svg>

Безо всяких JS такого, как у вас толка. В DOM будет встроена только конкретно вызванная иконка из внешнего файла. При этом кеширование тоже будет работать.

Не работает из коробки в IE11 и ранних версиях EDGE, но для них есть полифил:
https://github.com/jonathantneal/svg4everybody
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
25 апр. 2024, в 12:03
75000 руб./за проект
25 апр. 2024, в 11:49
25000 руб./за проект
25 апр. 2024, в 11:37
40000 руб./за проект