У меня возникли проблемы с использованием функции Element.append(el)
в API Snap.svg. Мне нужно сохранить экземпляр этого SVG в массиве переменных, чтобы я мог получить доступ к определенным во время выполнения.Сохранение объектов SVG в массиве для загрузки
Когда я пытаюсь использовать этот код, просто сохраняя его в groupViews
, он работает. Но, поставив его в массив (groupView
) приносит мне эту ошибку:
Uncaught TypeError: Cannot read proerty 'append' of undefined
Консоль показывает мне тот же результат, когда я вхожу groupViews
и groupView[i]
, поэтому я не уверен, что еще попробовать.
Любые идеи относительно того, как я могу это решить? Благодарю.
for(var i = 0; i < numOfGroups; i++)
{
var sel = '#GroupView' + i;
groupView[i] = Snap(sel);
console.log(groupView[i]);
groupViews = Snap('#GroupView0');
console.log(groupViews);
Snap.load("/svg/groupView-12_13_2016-01.svg", function(f) {
groupView[i].append(f);
groupViews.append(f);
}); //end of Snap.load(groupView)
}
Edit (1/5):
Вот HTML-код, где я пустой SVGs загружен:
<div class = "groupView0">
<svg viewBox='0 0 3640.9 540.5' id='GroupView0'></svg>
</div>
<div class = "groupView1">
<svg viewBox='0 0 3640.9 540.5' id='GroupView1'></svg>
</div>
Таким образом, именно поэтому я загрузка конкретного файла SVG и добавив его в JS. Есть лучший способ сделать это?
Edit (1/6):
Вот небольшая часть моего файла: SVG
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 20.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 3640.9 540.5" style="enable-background:new 0 0 3640.9 540.5;" xml:space="preserve">
<g id="A" onclick="detailedView();" cursor="pointer">
<rect id="PanelBackground" x="35.4" y="55.5" class="st2" width="173.2" height="155"/> <!--height="444" -->
<g id="UpperBar">
<linearGradient id="Header_20_" gradientUnits="userSpaceOnUse" x1="35.3937" y1="67.0279" x2="208.5774" y2="67.0279">
<stop offset="0" style="stop-color:#F68E1E"/>
<stop offset="0.5" style="stop-color:#F16A22"/>
<stop offset="0.903" style="stop-color:#F05F22"/>
<stop offset="1" style="stop-color:#F05C22"/>
</linearGradient>
<polygon id="Header" class="st3" points="35.4,55.5 208.6,55.5 208.6,78.6 35.4,78.6 "/>
<g>
<rect x="82.1" y="61.8" class="st4" width="121" height="10.8"/>
<text id="GroupName" transform="matrix(1 0 0 1 82.0885 71.6627)" class="st5 st6 st7">A</text>
<text id="FloorNumber" transform="matrix(1 0 0 1 182.3287 141.8773)" class="st2 st19 st7">X</text>
</g>
</g>
</svg>
После выполнения код размещен .. Если я пытаюсь запустить код, как:
groupName[0] = groupView[0].select('#GroupName');
groupName[0].attr({
text: "something"
});
Я получаю эту ошибку: Uncaught TypeError: Cannot set property '0' of undefined
ли уже загружен SVG? Или вы просто загружаете его на Snap.load? – MiltoxBeyond
@MiltoxBeyond Yep, SVG загружается на мою HTML-страницу. – KS7X
Что вы пытаетесь сделать, сохраните элементы svg, которые будут добавлены позже? Или сохраните элементы SVG, одновременно добавив некоторые или все элементы в DOM, так что они все находятся в DOM и отображаются, но вы просто обращаетесь к ним позже? Вероятно, нет смысла добавлять (f) дважды, но нужно немного больше информации. – Ian