#javascript #svg
#javascript #svg
Вопрос:
Я использую Chrome, и у меня есть пример со следующим кодом:
<svg width="2000" height="800" id="canvas" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<image xlink:href="icons/remove.svg" height="200" width="200" x="0" y="0"></image>
</svg>
Это отображается правильно.
Когда я создаю тот же самый тег изображения с помощью Javascript, изображение не отображается. Глядя на вкладку сеть, кажется, что она не извлекается с сервера.
Редактировать следующие комментарии
Код, используемый для добавления изображения svg:
let svg = document.getElementById('canvas');
let boxSide = 200;
const svgns = 'http://www.w3.org/2000/svg';
let x = 0;
let y = 0;
let element = document.createElementNS(svgns, 'image');
element.setAttribute("xlink:href", "icons/remove.svg");
element.setAttribute("width", boxSide.toString());
element.setAttribute("height", boxSide.toString());
element.setAttribute("x", "0");
element.setAttribute("y", "0");
svg.appendChild(element);
Позвольте мне еще раз подчеркнуть, что DOM выглядит точно так же, как созданный статически, который отображается правильно
Комментарии:
1. Я подозреваю, что вы можете использовать createElement вместо
createElementNS
и / или setAttribute вместоsetAttributeNS
. Если это не поможет, пожалуйста, добавьте свой код javascript в вопрос.2. @enxaneta сделано, но, пожалуйста, обратите внимание, что DOM выглядит одинаково при динамическом или статическом создании
3. @FedericoTomassetti xlink:href необходимо создать с помощью setAttributeNS
4. @RobertLongson вы правы, это исправлено
Ответ №1:
Поскольку вы создаете элемент с пространством createElementNS
имен, вам нужно использовать element.setAttributeNS
вместо element.setAttribute
.
Попробуйте это:
let svg = document.getElementById('canvas');
let boxSide = 200;
const svgns = 'http://www.w3.org/2000/svg';
let element = document.createElementNS(svgns, 'image');
element.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', 'icons/remove.svg');
element.setAttributeNS(null, 'width', boxSide.toString());
element.setAttributeNS(null, 'height', boxSide.toString());
element.setAttributeNS(null, 'x', '0');
element.setAttributeNS(null, 'y', '0');
svg.appendChild(element);