2

このJSFiddle (以下のコード) では、単にパスを複製してその設定を変更しようとしています。ただし、コードを実行すると、rect2 にメソッドがsetAttribute()定義されていないというエラーが表示されます。

ただし、代わりに、このメソッドを rect1 で実行すると、この JSFiddlechange()のようにエラーは発生しません。したがって、完全なクローンが生成されないという点で、クローン方法に問題があると思われます。

私は何を間違っていますか?拡張機能に問題がある場合、適切な回避策は何ですか? ありがとう

$('body').svg({onLoad: function(svg){
    var path = svg.createPath();
    var rect1 = svg.path(
        path.move( 50, 50 )
        .line( 200, 0, true )
        .line( 0, 200, true )
        .line( -200, 0, true )
        .close(),
        {
            fill: 'none', 
            stroke: '#00f', 
            strokeWidth: 30
        }
    );
    var rect2 = svg.clone(null, rect1);
    svg.change(rect2, {
            fill: 'none', 
            stroke: '#f00', 
            strokeWidth: 10
    });
}});

これまでの私の努力:

  • 複製する前に alert(rect1) を実行すると、「[object SVGPathElement]」と表示されます。
  • 複製後に alert(rect2) を実行すると、「[object SVGPathElement].
  • alert(rect1.setAttribute) を実行すると、「function setAttribute() {[native code]}」と表示されます
  • alert(rect2.setAttribute) を実行すると、「未定義」と表示されます。
4

2 に答える 2

1

あなたが何をしようとしているのか正確にはわかりませんが、複製されたSVGオブジェクトの属性を操作できないという同様の問題が発生しました。

私の解決策は、最初のオブジェクトをワークスペースとして使用し、それを修正することでした。次に、最初のオブジェクトのクローンを作成し(必要に応じてクローンを配置/移動し)、最初のオブジェクトに戻り、再度クローンを作成する前に再度調整します...すすぎ、繰り返します...

それは厄介でハッキーであり、あなたの要件にさえ適合しないかもしれませんが、それは私がクローンの問題を回避することができる唯一の方法でした。

于 2013-03-04T10:45:51.357 に答える
0

clone 関数は、複製されたノードの配列を返します。だから私は変わった

var rect2 = svg.clone(null, rect1);

var rect2 = svg.clone(null, rect1)[0];

私が得られないのは、返された配列が SVGPathElement 型のように見える理由です!! jquery.svg.js ソースにキャストが見当たりません。

于 2013-03-02T02:53:45.247 に答える