Похоже, add
ожидает объект SVG.js, а не узел DOM. Вы можете получить объект SVG.js из узла DOM, используя свойство instance
.
Вот тот же фрагмент, теперь использующий elem.instance
, который не выдает ошибку. Тем не менее, он не будет добавлять один и тот же элемент дважды, поэтому он не будет делать много ...
Если вы хотите получить объект SVG.js по идентификатору, вы можете использовать the SVG.get()
метод для получения элемента
let d = SVG('board').size(100, 100);
function createElem(elemId) {
let elem;
elem = d.rect().attr({
id: elemId
});
return elem;
};
function main() {
'use strict';
let elem, elemId, s;
elemId = `elem101`;
elem = createElem(elemId);
alert(elem);
// Returns ‘elem101’ although elem is an object.
// Apparently SVG.js overrides the toString() method of their objects to
// return the id property if present.
s = d.group();
s.add(elem); // Appears to work fine up to this point
elem = document.getElementById(elemId);
alert(elem); // returns ‘[object SVGRectElemnt]’; Why?
// Since you're using DOM methods, it's retrieving a DOM object.
// To get the SVG.js object, use an SVG.js method
// elem = SVG.get(elemId);
try {
s.add(elem.instance); // does nothing because of the add() call above
} catch (e) {
console.log(e.message);
}
// OR
try {
s.add(SVG.get(elemId)); // does nothing because of the add() call above
} catch (e) {
console.log(e.message);
}
};
main();
<script src="https://cdnjs.cloudflare.com/ajax/libs/svg.js/2.6.5/svg.js"></script>
<div id='board'></div>