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

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

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

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

HTML

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

Q&A

1回答

553閲覧

ループ処理でURLを正誤判定したい

mii2

総合スコア12

JavaScript

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

HTML

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

0グッド

1クリップ

投稿2022/08/30 08:22

編集2022/08/31 02:35

前提

htmlファイル内で他サイトからimgを読み込んでいます。

<img src="https://abcde.com/abcde/*/assets/img01.jpg">

ただ、システムの都合上、imgが置いてあるフォルダ名の*部分が「v1」「v2」・・・と
数字が増え、URLが変わってしまいます。

こちらでは正解のURLが分からないため、jsで画像が読み込めるよう処理できないかと検討しています。

ループ処理でv1,2・・・とURLを変えていき
"img.onload"で正しいURLかどうかを判定できるか試したのですが、上手くいきません。

参考にしたサイトはこちらです。

何か良い策はないでしょうか?

追記1

<script> var img = new Image(); var img01url = img.src; for (var i = 1; img.onload = ('https://abcde.com/abcde/v'+'i'+'/img01.jpg'); i++){ imgurl=('https://abcde.com/abcde/v'+'i'+'/img01.jpg'); if( i > 1000 ) break; }; </script>

追記2

<img src="img01url"> <script> const img = new Image(); let i = 1; const img01url = 'https://abcde.com/abcde/v'+'i'+'/img01.jpg'; img.onerror = function() { i=i++ } img.onload = function() { img.src = img01url; } </script>

追記3

<img src="img01url"> <script> const img = new Image(); let i = 1; const img01url = 'https://abcde.com/abcde/v'+'i'+'/img01.jpg'; img.onerror = function() { img01url = img.src; i=i++ } img.onload = function() { document.querySelector('img').src = img.src } img.src = img01url; </script>

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

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

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

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

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

int32_t

2022/08/30 08:35

> ループ処理でv1,2・・・とURLを変えていき > "img.onload"で正しいURLかどうかを判定できるか試したのですが、上手くいきません。 アプローチは間違ってないと思います。試したコードを開示してください。
guest

回答1

0

参考サイトの内容を理解できていないのですね。

Promise は質問者さんにはまだ早いと思うので使わないことにすると、コールバックの繰り返しになるので for は使えません。

  • Image オブジェクトを用意します。例: const img = new Image();
  • グローバル変数 i を用意し、1で初期化します。例: let i = 1;
  • このImage オブジェクトの onload イベントハンドラでは、そのオブジェクトの src プロパティがロード成功したURLなので、そのURLをページ上に表示します。
  • このImage オブジェクトの onerror イベントハンドラでは、i を1つ増やして新しい画像URLを作成し、src プロパティに代入します。(この操作で、のちに新しい画像URLに対して onload から onerror のどちらかが呼ばれます)
  • i==1の最初の画像URLを作成し、このImage オブジェクトの src プロパティに代入します。(この操作で、のちに onloadonerror のどちらかが呼ばれます)

投稿2022/08/31 01:28

int32_t

総合スコア20941

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

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

mii2

2022/08/31 01:56

ご回答ありがとうございます。 jsについては本当に初心者でして。 頂いた情報をもとに「追記2」を記載しました。 添削いただけると幸いです。
int32_t

2022/08/31 02:11

* img.onerror に指定している関数の中で、img.src を新しいURLで更新してください。 * img.onload に指定している関数の中で img.src を更新する必要はありません。document.querySelector('img').src = img.src などで画面に表示しましょう。 * img.onload の設定の後に、img01url を img.src に代入する必要があります。
mii2

2022/08/31 02:35

ご回答ありがとうございます。 「追記3」を記載しました。 ご覧いただけますか?
int32_t

2022/08/31 02:44

> img01url = img.src; > i=i++ 回答に「i を1つ増やして新しい画像URLを作成し、src プロパティに代入します」と書きました。 ここで増やしたiから新しい画像URLを作成してください。 ここで img01url は使いません。
int32_t

2022/08/31 03:34

動かしてみると期待通りのURLになってないとわかると思いますよ。console.log(img.src); などをコードに入れておくと、ブラウザの開発者ツールのコンソールで値を確認することができます。 i++; img.src = 'https://abcde.com/abcde/v' + i + '/img01.jpg'; です。 よく見たら img01url の初期化も間違ってますね。
mii2

2022/08/31 05:43

ありがとうございます! このサイト、同じ状態の画像が複数ありまして <img src="img01url"> <img src="img02url"> ・・・ という風に読ませたいのですが、初期化の方法も異なりますか?
int32_t

2022/08/31 06:57

複数の <img> が別々の画像URLを持つべきなら、当然画像URLの生成方法が異なるはずですね。 複数 <img> のケースは元の質問文になかった課題なので、もしわからないことがあれば新しい質問にしてください。
mii2

2022/08/31 07:08

回答ありがとうございます。 別件で質問を立てるようにいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問