質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
jQueryプラグイン

jQueryの拡張機能。 様々な種類があり、その数は膨大です。公開済みのプラグインの他にも、自作することもできます。 jQueryで利用できるようにしておくだけで、導入およびカスタマイズが比較的容易に行なえます。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

2回答

463閲覧

JavaScriptライブラリを使って、インラインSVGに変換した画像要素にaタグを追加したい

toto-ototo

総合スコア0

jQueryプラグイン

jQueryの拡張機能。 様々な種類があり、その数は膨大です。公開済みのプラグインの他にも、自作することもできます。 jQueryで利用できるようにしておくだけで、導入およびカスタマイズが比較的容易に行なえます。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2022/11/14 01:43

前提

よろしくお願いします。
SVG画像をimg画像として取り込み、JavaScriptライブラリ「deSVG」を使ってインラインSVGに変換しています。
そのデータにaタグを追加したいのですが、jQueryでコードを入力しても追加できませんでした。
HTMLを直接触ることができないプログラムなので、SVGを直接HTMに記載したり、aタグを追加したりする事ができず、対処方法がわからず困っております。

jQueryも詳しくなく、自分なりに調べて半日頑張ってみましたが、何もヒントが掴めずにおりまして、
解決策がわかる方がいらっしゃいましたら、お願いいたします。

実現したいこと

インラインSVGに変換した画像要素に、動的にaタグを追加したい。
<g></g>タグをaタグで囲みたいです。

発生している問題・エラーメッセージ

エラーは何も出ていません。
検証画面ではSVGコードが見えますが、ページのソースを表示すると下記の内容(イメージのリンクURLのみ)しか記載がありませんでした。

イメージ説明

HTML

1<div class="●●"><img src="https://●●●.svg" class="●●"></div>

該当のソースコード

SVGのgタグについているIDにaタグを追加

jQuery

1$(window).on('load',function() { 2 $('#●●).wrap('<a href="./"></a>'); 3 });

試したこと

jQueryの読み込みの順番を変えてみましたが、変化がありませんでした。

補足情報(FW/ツールのバージョンなど)

詳しい方がいらっしゃいましたら、教えていただけると嬉しいです。
どうぞよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

インラインsvg内の要素の属性をいじる場合はsetAttributeNSを利用ください

参考

※調整して簡素化しました

javascript

1<script> 2window.addEventListener('DOMContentLoaded', ()=>{ 3 const circle=document.querySelector('#circle'); 4 const a=document.createElementNS('http://www.w3.org/2000/svg','a'); 5 a.setAttributeNS('http://www.w3.org/1999/xlink','xlink:href','https://teratail.com/'); 6 circle.parentNode.insertBefore(a,circle); 7 a.appendChild(circle); 8}); 9</script> 10<svg width="200" height="200" type="image/svg+xml" > 11   <circle id="circle" cx="100" cy="100" r="50" fill="red"/> 12</svg>

投稿2022/11/14 01:59

編集2022/11/14 02:51
yambejp

総合スコア114843

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

toto-ototo

2022/11/14 02:07

yambejpさん、早速教えていただき、ありがとうございます。 ちょっと調べた限りにはすぐには理解できなさそうなので、もう少し読みこんで試してみたいと思います。 とても困っていまして、早々にご回答いただき大変嬉しかったので、取り急ぎお礼だけ言わせてください。 本当にありがとうございます。 試してみてまたご質問させていただくかもしれませんが、よろしくお願いいたします。
yambejp

2022/11/14 02:37

svgの適当な要素にあとからリンクを設定する方法を参考までに追記しておきました
toto-ototo

2022/11/14 02:47

yambejpさん 追加で情報いただき、ありがとうございます。 ずうずうしく質問させていただきたいのですが、 ・SVGにidがプラログラムからはつけられず、クラスだけついているのですが、クラスで代用しても良いのでしょうか? ・下記の1つ目の””と、3つ目の""はどれを入れれば良いでしょうか?3つ目は追加したいaタグのリンク先でしょうか?? a.setAttributeNS('http://www.w3.org/1999/xlink','xlink:href','https://teratail.com/'); お時間ある時で大丈夫ですので、教えていただけましたら幸いです。 お手数ですが、よろしくお願いいたします。
yambejp

2022/11/14 02:54

> SVGにidがプラログラムからはつけられず 今回のソースでsvg自体をつかむ必要はなかったですね。 回答調整しました。 掴む必要がある場合は、id以外の方法でも問題ありません > 下記の1つ目の””と、3つ目の""はどれを入れれば良いでしょうか? 1つ目はルールなので必ずこれを入れてください 3つ目はすきなリンク先を指定してください
toto-ototo

2022/11/14 04:30

ご丁寧に教えていただき、ありがとうございます。 教えていただいたように下記のコードを入れたところ、 window.addEventListener('DOMContentLoaded', ()=>{ const store=document.querySelector('#store'); const a=document.createElementNS('http://www.w3.org/2000/svg','a'); a.setAttributeNS('http://www.w3.org/1999/xlink','xlink:href','https://teratail.com/'); store.parentNode.insertBefore(a,store); a.appendChild(store); }); 下記のエラーが出てしまいました。 Uncaught TypeError: Cannot read properties of null (reading 'parentNode') at 〜 parentNodeの箇所の事を何か言ってみるようなのですが、どこをどのように修正すれば良いでしょうか。。。 立て続けの質問で申し訳ありませんが、お時間ありましたらよろしくお願いいたします。
yambejp

2022/11/14 05:27

おそらくそのライブラリの問題なので、ちょっとわかりかねます。 見た感じstoreというidをつけた要素がないみたいですね
guest

0

SVGの中では SVG 名前空間の <a> を使用する必要があります。jQuery の wrap() で文字列を渡すとおそらく HTML の <a> を生成するので動かないのでしょう。

たぶん、以下のようにすればできるんじゃないでしょうか(未確認):

js

1let svgA = document.createElementNS( 2 'http://www.w3.org/2000/svg', 'a'); 3svgA.href = './'; 4$('#●●').wrap(svgA);

投稿2022/11/14 02:19

編集2022/11/14 02:28
int32_t

総合スコア20884

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

toto-ototo

2022/11/14 02:36 編集

int32_tさん、ご連絡いただきありがとうございました。 お二人の回答を見て、HTMLをどうにかする訳ではないという事だけは理解できました。 setAttributeNSもcreateElementNSも初めて聞く言葉で難しそうですが、頑張って勉強したいと思います。 とりあえず教えていただいたコードをコピーしてみましたが、こちらは残念ながら動かないようです。 コピーが間違っているかもしれません、問題がありましたら教えていただけましたら幸いです。 let svgA = document.createElementNS( 'http://www.w3.org/2000/svg', 'a'); svgA.href = './'; $('#store).wrap(svgA); 早々に教えていただき、大変ありがたく思います。 本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問