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

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

新規登録して質問してみよう
ただいま回答率
85.49%
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

3回答

242閲覧

複数同一idの一部path変更

退会済みユーザー

退会済みユーザー

総合スコア0

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2018/02/17 04:45

実現したいこと

以下HTMLの通り、複数の同一IDを持つURLに同じjavascriptを実行することで、参照srcのpathを変更したい。
ex)data/A/sample.png -> data/B/sample.png

html

1<img src="data/A/sample1-1.png" alt="" width="100%" height="100%" id="chimg" /> 2<img src="data/A/sample1-2.png" alt="" width="100%" height="100%" id="chimg" /> 3<video controls width="100%" height="100%" poster="data/A/sample2-1.png" id="chvid"> 4 <source src="data/A/sample2-2.mp4"> 5</video> 6 7<a href="javascript:void(0)" id="B" onclick="changeUser(this.id,'chimg','chvid');">button</a>

JS

1function changeUser(dir, imgid, vidid) { 2 var user = dir; 3 var path = document.getElementById(imgid); 4 var imgSrc = $("img#chimg").attr('src').split('/'); 5 var chpath = $("img#chimg").attr('src').replace(imgSrc[1], user); 6 $("img#chimg").attr('src', chpath); 7};

問題

一番最初に一致したidのpathのみ変更ができており、二つ目は一つ目と同じファイルを参照してしまう。

よろしくお願いいたします。

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

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

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

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

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

yoorwm

2018/02/17 04:59

HTMLの仕様に同じidを使用してはいけない、というのがあるのですがそこに引っかかっていませんか?
退会済みユーザー

退会済みユーザー

2018/02/17 05:00

すいません、そうですね。idはすべて異なってもよいのですが、その場合にこの処理を各pathに対して行うにはどのようにすべきでしょうか。
guest

回答3

0

ベストアンサー

ID振り分けられるなら、直接指定で

html

1<img src="data/A/sample1-1.png" alt="" width="100%" height="100%" id="chimg1" /> 2<img src="data/A/sample1-2.png" alt="" width="100%" height="100%" id="chimg2" />

javascript

1 var imgSrc = $("img#chimg1").attr('src').split('/'); 2 var chpath = $("img#chimg1").attr('src').replace(imgSrc[1], user); 3 $("img#chimg1").attr('src', chpath);

クラスに変えれれば、eqで一番目を取得してくればOKだと思います。

html

1<img src="data/A/sample1-1.png" alt="" width="100%" height="100%" class="chimg" /> 2<img src="data/A/sample1-2.png" alt="" width="100%" height="100%" class="chimg" />

javascript

1 var imgSrc = $("img.chimg").eq(0).attr('src').split('/'); 2 var chpath = $("img.chimg").eq(0).attr('src').replace(imgSrc[1], user); 3 $("img#chimg1").eq(0).attr('src', chpath);

問題の意図を間違えておりました。
eachで回せば、個別に変更できます。

javascript

1function changeUser(dir, imgid, vidid) { 2 var user = dir; 3 $('img.chimg').each(function(){ 4 var imgSrc = $(this).attr('src').split('/'); 5 var chpath = $(this).attr('src').replace(imgSrc[1], user); 6 $(this).attr('src', chpath); 7 }) 8};

$('img.chimg')の部分は、$('img#chimg1, img#chimg2')でも
指定したセレクターの分だけ、処理がされます。


videoのposter,sourceのほうも変更する

srcやposterなどの変更用のクラスはタグが違うだけで、基本的には同じ処理をするので、
タグを判定し、同じ記述が重ならないようにしたほうが良いのかなと思います。

html

1<img src="data/A/sample1-1.png" alt="" width="100%" height="100%" class="chimg" /> 2<img src="data/A/sample1-2.png" alt="" width="100%" height="100%" class="chimg" /> 3<video controls width="100%" height="100%" poster="data/A/sample2-1.png" id="chvid" class="chimg"> 4 <source src="data/A/sample2-2.mp4" class="chimg"> 5</video>

javascript

1function changeUser(dir, imgid, vidid) { 2 var user = dir; 3 $('.chimg').each(function(){ 4 //タグ取得 5 var tag = $(this).get(0).tagName.toLowerCase(); 6 7 changeTag = 'src'; 8 //videoなら対象のタグをposterにする 9 if(tag == 'video'){ 10 changeTag = 'poster'; 11 } 12 13 var imgSrc = $(this).attr(changeTag).split('/'); 14 var chpath = $(this).attr(changeTag).replace(imgSrc[1], user); 15 $(this).attr(changeTag, chpath); 16 }) 17};

投稿2018/02/17 05:44

編集2018/02/17 07:27
kszk311

総合スコア3404

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

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

退会済みユーザー

退会済みユーザー

2018/02/17 05:53

回答ありがとうございます。classだと順々に各srcを処理できるのでしょうか。 以下のようになりませんでしょうか。 data/A/sample1-1.png -> data/B/sample1-1.png data/A/sample1-2.png -> data/B/sample1-1.png
kszk311

2018/02/17 06:26

問題の意図を間違えておりましたので、編集しました。失礼しました。 「srcのフォーマットが同じような形式をもつ複数の要素の、srcの一部をそれぞれ変えたい」ということですね。
退会済みユーザー

退会済みユーザー

2018/02/17 06:36 編集

そうですね、質問の意図が伝わらず説明不足たいへん申し訳ありません。 ありがとうございます。対応できました。 .eachというのがあるのですね。初めて知りました。 ちなみにVideoタグもあるのですが、そちらのVideoタグにも同じclass(chimg)をいれて、$('img.chimg', 'video.chimg') とすればよろしいのでしょうか。 それとも同一クラスを指定するほかの方法はございますでしょうか。
kszk311

2018/02/17 06:42

videoタグのposterですか?それとも、sourceタグのsrcですか? 該当箇所のセレクタをつければ、動作します。 $('img.chimg, source') とか videoタグのposterの場合は、 『タグが「video」だったら対象をposterにする』という処理が必要です。
退会済みユーザー

退会済みユーザー

2018/02/17 06:53 編集

videoタグのposter とsrc 両方となります。 PATH変更対象すべてにclass=changeを追加し、 $('img.change, video.change,source.change') とすればよろしいのでしょうか。
退会済みユーザー

退会済みユーザー

2018/02/17 06:59

例えば以下のようにするとよいのでしょうか。 $('img.change').each(function () { var imgSrc = $(this).attr('src').split('/'); var chpath = $(this).attr('src').replace(imgSrc[1], dir); $(this).attr('src', chpath); }); $('source.change').each(function () { var imgSrc = $(this).attr('src').split('/'); var chpath = $(this).attr('src').replace(imgSrc[1], dir); $(this).attr('src', chpath); }); $('video.change').each(function () { var imgSrc = $(this).attr('poster').split('/'); var chpath = $(this).attr('poster').replace(imgSrc[1], dir); $(this).attr('src', chpath); });
kszk311

2018/02/17 07:08

そうですね、それぞれ記述していくならそういった感じになります。 videoの最後の処理だけ、「src」になっていますが…。 それらをまとめたソースを投稿しましたので、ご確認頂ければと思います。
退会済みユーザー

退会済みユーザー

2018/02/17 07:24

$('chimg').each(function(){ ⇒ .chimg tag == 'video' ⇒ 'VIDEO' でできました。大変ありがとうございました。
kszk311

2018/02/17 07:28

良かったです。ソース少し間違っており失礼しました。 大文字小文字の対応も加えております。(toLowerCase)
退会済みユーザー

退会済みユーザー

2018/02/17 07:49

色々なAPIがあるのですね。全く知らずお手数おかけしました。 ご丁寧にありがとうございました。
退会済みユーザー

退会済みユーザー

2018/02/19 05:26 編集

できたつもりでいましたが、このスクリプトを動かしても動画が切り替わっておりませんでした。 なにか原因はお判りでしょうか。
kszk311

2018/02/19 07:19

現状のソースを追記していただけますか。
退会済みユーザー

退会済みユーザー

2018/02/19 08:35

回答ありがとうございます。 .load() の呼び出しができてないことによるものでした。 よって、VIDEOタグにsrcを記載して $(this).attr(changeTag, chpath).load(); とすればよいのはわかるのですが、 SOURCEタグのsrcをload(); する方法がわかりません。。
guest

0

videoタグの場合は参照先を変更した後にload()をする必要があることがわかりました。

js

1 $('.change').each(function () { 2 //変更要素定義 3 changeTag = 'src'; 4 //ディレクトリごとに分割 5 var chSrc = $(this).attr(changeTag).split('/'); 6 //参照パス作成 7 var chpath = $(this).attr(changeTag).replace(chSrc[1], dir); 8 //参照パス更新 9 $(this).attr(changeTag, chpath); 10 11 //タグがVIDEOの場合は読み込み対応必須 12 if ($(this).get(0).tagName == 'VIDEO') { 13 var video = $(this).get(0); 14 if ($(this).hasClass('keep')) { 15 video.currentTime = 1000; 16 } 17 video.load(); 18 } 19 }); 20

投稿2018/02/20 08:58

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

kszk311

2018/02/20 15:06

なるほど、そうだったんですね。半端な知識で回答してしまい、失礼しました。
退会済みユーザー

退会済みユーザー

2018/02/21 01:14

いえいえ、こちらこそアドバイスのおかげで対応することができました。 ありがとうございました。
guest

0

回答ありがとうございます。

js

1function changeUser(dir, imgid, vidid) { 2 let ar = ['#chimg1', '#chimg2']; 3 var user = dir; 4 for (let i = 0; i < ar.length; i++) { 5 var imgSrc = $(ar[i]).attr('src').split('/'); 6 var chpath = $(ar[i]).attr('src').replace(imgSrc[1], user); 7 $(ar[i]).attr('src', chpath); 8 } 9};

というforで処理できるとは考えたのですが、

js

1let ar = ['#chimg1', '#chimg2'];

ここをもっとうまく取得する方法はないのでしょうか。

投稿2018/02/17 05:54

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問