回答編集履歴

3

補足情報を追加

2018/01/06 13:36

投稿

defghi1977
defghi1977

スコア4756

test CHANGED
@@ -48,6 +48,14 @@
48
48
 
49
49
  ```
50
50
 
51
+ NOTE:
52
+
53
+ 質問者コメントによれば上記セレクタでは動作せず, 別のセレクタを記述をする必要があるとのことです.
54
+
55
+ (セレクタの記述が正しければ動作する)
56
+
57
+
58
+
51
59
  参考
52
60
 
53
61
  [http://api.jquery.com/load/](http://api.jquery.com/load/)

2

回答を追加

2018/01/06 13:36

投稿

defghi1977
defghi1977

スコア4756

test CHANGED
@@ -51,3 +51,45 @@
51
51
  参考
52
52
 
53
53
  [http://api.jquery.com/load/](http://api.jquery.com/load/)
54
+
55
+
56
+
57
+ ---
58
+
59
+ > たとえば以下の処理をコピーして複数実行しても
60
+
61
+ svgタグに追加されるのは1つのみとなってしまうようです
62
+
63
+ ```JavaScript
64
+
65
+ $("#frame").load("http://hogehoge/svg_data.php", function(){
66
+
67
+ });
68
+
69
+ ```
70
+
71
+ > 複数追加されるようにしたいのですがどうしたらいいでしょうか?
72
+
73
+ (画面上だと重なってしまうためchromeのdevelopertoolで確認する必要があります)
74
+
75
+
76
+
77
+ `jQuery.load`メソッドは内部で`jQuery.html`メソッドを呼んでいます. つまり単一のノードに対して`load`メソッドを実行するとその都度**当該ノードの`innerHTML`プロパティを上書きしている**こととなるため, 見た目上「svgタグに追加されるのは1つのみ」となります.
78
+
79
+
80
+
81
+ [https://github.com/jquery/jquery/blob/master/src/ajax/load.js](https://github.com/jquery/jquery/blob/master/src/ajax/load.js)
82
+
83
+
84
+
85
+ 従って, 複数のSVGコードを単一の`svg`要素に挿入するのであれば次の二つの対処策が考えられます.
86
+
87
+
88
+
89
+ - `jQuery.ajax`メソッドを用いてSVGコードを取得し, 自分で`svg`要素にSVGコードを(上書きではなく)追加する.
90
+
91
+ この場合, 得られたコードからルートの`svg`要素を除去するなどの処理が必要となるでしょう.
92
+
93
+ - SVGを読み込む専用のノードを用意し, `jQuery.load`メソッドで入手したSVGツリーを`#frame`ノードに移動する.
94
+
95
+ `load`メソッドは第3引数にコールバック関数を受け付けるので, ここにノードの移動処理を記述すればよいでしょう.

1

別解を追加

2018/01/06 13:31

投稿

defghi1977
defghi1977

スコア4756

test CHANGED
@@ -29,3 +29,25 @@
29
29
  ```
30
30
 
31
31
  としjQueryで読み込むようにすればよいでしょう.
32
+
33
+
34
+
35
+ ---
36
+
37
+ 「PHP側を編集できない」条件下であれば挿入するノードに条件をつければよいでしょう.
38
+
39
+ ※実際の動作は試していません(間違っているかもしれません).
40
+
41
+
42
+
43
+ ```JavaScript
44
+
45
+ //jQuery
46
+
47
+ $("#frame").load("http://hogehoge/svg_data.php :root>*");
48
+
49
+ ```
50
+
51
+ 参考
52
+
53
+ [http://api.jquery.com/load/](http://api.jquery.com/load/)