Snap.svg APIに関数Element.append(el)
を使用する際に問題があります。 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)
}
編集(1/5):ここで
は私が空SVGsがロードされているHTMLコードです:したがって
<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に追加します。これを行うより良い方法はありますか?
編集(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ええ、SVGは私のHTMLページに読み込まれます。 – KS7X
何をしようとしていますか?後で追加する要素を保存しますか?また、DOMのいくつかまたはすべての要素を同時にDOMに追加しながらSVG要素を格納するので、それらはすべてDOMにあり、表示されますが、後でアクセスするだけです。おそらく(f)を2回追加するのは意味がありませんが、もう少し情報が必要です。 – Ian