Если я динамически загружаю некоторые данные svg внутри изображения svg, я могу увидеть его при проверке DOM, но он фактически не отображается в браузере. Ниже приведен простой пример, когда я пытаюсь поместить маленький прямоугольник внутри большего прямоугольника. Предсборное изображение SVG с точно таким же содержимым работает, но когда я пытаюсь объединить их на лету с jquery, внутренний прямоугольник никогда не появляется. Что я недопонимаю?Как динамически добавлять элементы в SVG-изображение с помощью jquery?
test.html:
<html>
<head>
<title>SVG test</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("#already-combined").load("test_combined.svg svg"); //works
$("#combine").load("test_outer.svg svg", function() {
$(this).find("svg").append("<g id=\"appended\"></g>");
// present when inspecting DOM, but is never visible...
$("#appended").load("test_inner.svg svg > *");
});
});
</script>
</head>
<body>
<h3>Already combined...</h3>
<div id="already-combined"></div>
<h3>Combine in javascript...</h3>
<div id="combine"></div>
</body>
</html>
test_combined.svg:
<svg width="100" height="100">
<rect x="1" y="1" fill="none" stroke="#000000" width="75" height="75"/>
<g>
<rect x="25" y="25" fill="none" stroke="#000000" width="25" height="25"/>
</g>
</svg>
test_outer.svg:
<svg width="100" height="100">
<rect id="outer" x="1" y="1" fill="none" stroke="#000000" width="75" height="75"/>
</svg>
test_inner.svg:
<svg width="100" height="100">
<rect id="inner" x="25" y="25" fill="none" stroke="#000000" width="25" height="25"/>
</svg>
Вот DOM, как видно, осматривая в светлячок:
<html><head>
<title>SVG test</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("#already-combined").load("test_combined.svg svg");
$("#combine").load("test_outer.svg svg", function() {
$(this).find("svg").append("<g id=\"appended\"></g>");
$("#appended").load("test_inner.svg svg > *");
});
});
</script>
</head>
<body>
<h3>Already combined...</h3>
<div id="already-combined"><svg width="100" height="100">
<rect x="1" y="1" fill="none" stroke="#000000" width="75" height="75"></rect>
<g>
<rect x="25" y="25" fill="none" stroke="#000000" width="25" height="25"></rect>
</g>
</svg></div>
<h3>Combine in javascript...</h3>
<div id="combine"><svg width="100" height="100">
<rect id="outer" x="1" y="1" fill="none" stroke="#000000" width="75" height="75"></rect>
<g id="appended"><rect id="inner" x="25" y="25" fill="none" stroke="#000000" width="25" height="25"></rect></g></svg></div>
</body></html>
Можете ли вы показать результат DOM (проверено)? – kevinkl3
Просто добавил его выше. – Blake