Я недавно искал что-то похожее на это, но мне нужно было обновить часть существующего SVG, поэтому использование innerHTML не было для меня вариантом. Я в конечном итоге взглянуть на то, как Canvg тянет его и придумал это:
var $contentToReplace = $('svg .some-class');
$contentToReplace.empty();
var content = new DOMParser().parseFromString(newContent, 'text/xml');
// content.children is an HTMLCollection, so using Array.prototype.slice to make a copy. if you
// don't make a copy, items will be removed from content.children each time appendChild is called,
// which will mess up the loop iteration
var children = Array.prototype.slice.call(content.children);
for (var i = 0; i < children.length; i++) {
$contentToReplace.get(0).appendChild(children[i]);
}
Вы можете проверить, как они это делали в Canvg - просто для поиска метода ParseXML.
Вы также можете передать в другой метод MIME types методу parseFromString. Поддержка браузеров на них немного отличается, например, например, тип MIME 'image/svg + xml' не поддерживается в IE9 или ранее.
Изменение типа MIME просто изменяет тип документа, который вы возвращаете. Использование 'text/xml' возвращает XMLDocument, который, как представляется, отлично работает в этом случае.
DOM, на который вы ссылаетесь: это встроенный или встроенный svg в html - или автономный svg? –
Извините, я хочу сделать изображение, описанное в строке, на странице. – Colin