このプログラムは晴れという文字が表示された場合晴れのアイコンを表示し、雨という文章が表示された場合雨のアイコンを表示するものなのですが二つ目以降の文章に画像が表示されません(下画像参照)
どのように改善したら2つ目以降もアイコンが表示されるのでしょうか。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<script>
window.addEventListener('load', function() {
var text = document.getElementById('text').textContent;
var imgWindow = document.getElementById('image_window');
var textList = ['晴れ', '雨'];
var imgList = ['Hare.png', 'Ame.png'];
var index = textList.findIndex(function(element) {
var reg = new RegExp(element);
return text.search(reg) != -1;
});
if (index != -1) {
var image = document.createElement('img');
image.src = imgList[index];
imgWindow.appendChild(image);
}
},false);
</script>
</head>
<body>
<p id="text">今日の天気は晴れです。<span id="image_window"></span></p><br>
<p id="text">明日の天気は雨です。<span id="image_window"></span></p><br>
<p id="text">明後日の天気は晴れです。<span id="image_window"></span></p><br>
</body>
</html>
このあとidをnameに変更してみたのですが逆に一行目にも画像が表示されなくなりました
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<script>
window.addEventListener('load', function() {
var text = document.getElementByName('text').textContent;
var imgWindow = document.getElementByName('image_window');
var textList = ['晴れ', '雨',];
var imgList = ['Hare.png', 'Ame.png'];
var index = textList.findIndex(function(element) {
var reg = new RegExp(element);
return text.search(reg) != -1;
});
if (index != -1) {
var image = document.createElement('img');
image.src = imgList[index];
imgWindow.appendChild(image);
}
},false);
</script>
</head>
<body>
<p name="text">天気は晴れです<span name="image_window"></span></p><br>
<p name="text">天気は雨です<span name="image_window"></span></p><br>
<p name="text">天気は雨です<span name="image_window"></span></p><br>
</body>
</html>
こうゆうことですか?
こうすると一行目も画像が表示されないのですが
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
こんばんは
そもそもですが、要素のIDは文書内で固有であることが原則です。
ですので、ご提示の最初の文書はHTMLの文法違反になっています。
一方、getElementByIdはIDを利用して要素を取得するメソッドですが、(当然ながら)ひとつの要素を返します。
従って、
>二つ目以降の文章に画像が表示されません
となります。
https://developer.mozilla.org/ja/docs/Web/API/Do …
>こうすると一行目も画像が表示されないのですが
getElementByNameというメソッドは存在しないので、エラーとなって停止しているものと思われます。
使うなら、getElementsByNameですが、こちらは複数の要素を返すので、(仮に要素がひとつしかなくても)NodeListと言われる配列に似たオブジェクトを返します。
https://developer.mozilla.org/ja/docs/Web/API/Do …
こちらの場合は、複数を扱う扱い方をする必要があります。
具体的には、添字でforループ等でまわすか、あるいは、forEachなどで順に処理するといった方法になるでしょう。
https://developer.mozilla.org/ja/docs/Web/API/No …
No.2
- 回答日時:
No1です
少し考え方を変えていますが、こんなのはいかがでしょうか。
<!DOCTYPE HTML>
<html lang="ja">
<head><title>Sample</title>
<script type="text/javascript">
(()=>{
const textList = ["晴れ", "雨"];
const imgList = ["Hare.png", "Ame.png"];
let reg = new RegExp("(" + textList.join("|") + ")","gm");
window.addEventListener("DOMContentLoaded", ()=>{
document.querySelectorAll("p.text").forEach((e)=>{
let res = e.textContent.match(reg);
if(res){
res.forEach((r)=>{
let image = new Image();
image.src = imgList[textList.indexOf(r)]
e.appendChild(image);
});
}
});
});
})();
</script>
</head>
<body>
<p class="text">今日の天気は晴れです。</p>
<p class="text">明日の天気は雨です。</p>
<p class="text">明後日の天気は晴れです。</p>
<p class="text">月曜日の天気は晴れ一時にわか雨です。</p>
</body>
</html>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- JavaScript GoogleChart 階層ごとのブロックの長さを個別に設定したい 1 2022/07/06 14:27
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- HTML・CSS CSS のみのタブ切り替えについて 1 2023/01/11 16:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JavaScriptでiframeの内容を「...
-
function の return 値を表示し...
-
onloadで2つの関数を設定したい
-
AjaxでXMLの要素が取得できない
-
html javascript 作った配列を...
-
乱数を一定時間毎に表示させた...
-
iframeの中から親ページをスム...
-
ひとつのHTMLファイル内にcanva...
-
IEの一番下の欄にメッセージ...
-
getElementsByNameで要素が取得...
-
月ごとに背景色を変える
-
<a href="#" …>の意味を教えて...
-
別ファイルのfunctionの読み込み方
-
JavascriptとJqueryを混在し記述
-
Dreamweaver で 外部JSを読み込...
-
pythonのWebスクレイピングでfi...
-
条件分岐で、読み込む外部スク...
-
Safariで<iframe>のinnerHTMLを...
-
bodyにidをつける理由は何ですか?
-
リンクをクリックすると文字が...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
getElementsByNameで要素が取得...
-
JavaScriptでiframeの内容を「...
-
キーを押している間の時間を計...
-
SCRIPT5007: 未定義または NULL...
-
JavaScript でキーを送る
-
フォーカス移動抑止について
-
リンク移動先のURLを取得
-
function の return 値を表示し...
-
初心者javascript ウィンドウサ...
-
ボタンのID名を取得するには?
-
フレームサイズの変更について
-
iframeの中から親ページをスム...
-
乱数を一定時間毎に表示させた...
-
ボタンを押してテキストエリア...
-
出荷予定日を表示するJavaスク...
-
XMLHTTPRequestでstatusが0に
-
自動ジャンプでフォームデータ...
-
ページ全体を検索して特定文字...
-
JavaScriptでの西暦下2桁での表...
-
idHOGEで取得したinnerText(数...
おすすめ情報