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

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

新規登録して質問してみよう
ただいま回答率
85.35%
タグ

特殊な記法により文書に埋め込む形で記述される付加情報をタグと呼びます。文書構造や書式、文字飾りなどを指示したり、画像や他の文書へのリンクを埋め込むことができる。

jQuery

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

HTML

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

Q&A

解決済

2回答

2448閲覧

jqueryのappend()でaタグを使ったリンクを表示させる際にaタグの外に文字列がきてしまう

kaoru_tujimiya

総合スコア36

タグ

特殊な記法により文書に埋め込む形で記述される付加情報をタグと呼びます。文書構造や書式、文字飾りなどを指示したり、画像や他の文書へのリンクを埋め込むことができる。

jQuery

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

HTML

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

0グッド

0クリップ

投稿2021/07/08 15:10

編集2021/07/09 10:16

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

for文で、liタグで複数個のHTMLを作成して代入をしているのですが
最初の項目のみリンクが適用されて、それ以降がaタグの後ろに文字列がきてしまうので
困ってます。

現状

代入後の画面のHTMLは以下のようになっている。

html

1//1つ目は正常にaタグで囲ってくれている 2<li> 3 <div class="news_contents_img_wrap"> 4 <a target="_blank" href="aaa"> 5 <img class="news_contents_img" src="https://aaa.com/desc_dgr8337/?utm_campaign=google_jobs_apply&amp;utm_source=google_jobs_apply&amp;utm_medium=organic"> 6 </a> 7 </div> 8 <div class="news_contents_info_wrap"> 9 <a class="news_contents_info_title" target="_blank" href="aaa"> 10 test 11 </a> 12 <p class="news_contents_info_date">2021-07-09</p> 13 </div> 14</li> 15//2つ目のliからaタグで画像や文字列を囲ってくれない 16<li> 17 <div class="news_contents_img_wrap"> 18 <a target="_blank" href="https://aaa.jp/DodaFront/View/JobSearchDetail/j_jid__3000512/-tab__jd/-fm__jobdetail"></a> 19 <img class="news_contents_img" src="aaa"> 20 </div> 21 <div class="news_contents_info_wrap"> 22 <a class="news_contents_info_title" target="_blank" href="aaa"></a>test2 23 <p class="news_contents_info_date">2021-06-17</p> 24 </div> 25</li>

理想

HTML

1<li> 2 <div class="news_contents_img_wrap"> 3 <a target="_blank" href="aaa"> 4 <img class="news_contents_img" src="bbbb"> 5 </a> 6 </div> 7 <div class="news_contents_info_wrap"> 8 <a class="news_contents_info_title" target="_blank" href="aaa"> 9 test 10 </a> 11 <p class="news_contents_info_date">2021-07-09</p> 12 </div> 13</li> 14<li> 15 <div class="news_contents_img_wrap"> 16 <a target="_blank" href="aaa"> 17 <img class="news_contents_img" src="bbbb"> 18 </a> 19 </div> 20 <div class="news_contents_info_wrap"> 21 <a class="news_contents_info_title" target="_blank" href="aaa"> 22 test2 23 </a> 24 <p class="news_contents_info_date">2021-06-17</p> 25 </div> 26</li>

該当のソースコード

HTML

1<div class="news_contents"> 2 <ul> 3 </ul> 4</div>

Jquery

1$(document).ready(function () { 2 fetch("https://aaa.microcms.io/api/v1/news?limit=100", { 3 headers: { 4 "X-API-KEY": "aaaaaaaaaaaaaaaaaaaaaa", 5 }, 6 }) 7 .then((json) => { 8 var content = json.contents; 9 for (var i = 0; i < content.length; i++) { 10 var img = content[i].img.url; 11 var title = content[i].title; 12 var date = content[i].date; 13 var link = content[i].link; 14 var news = 15 "<li><div class='news_contents_img_wrap'><a target='_blank' href=" + link + "><img class='news_contents_img' src=" + img + "></a></div>" + 16 "<div class='news_contents_info_wrap'><a class='news_contents_info_title' target='_blank' href=" + link + ">" + title + "</a>" + 17 "<p class='news_contents_info_date'>" + date + "</p></div></li>"; 18 $(".news_contents ul").append(news); 19 } 20 }) 21});

試したこと

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

特になし

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

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

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

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

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

itagagaki

2021/07/08 16:10

再現できませんでした。正常に動作しているようです。 <div class="news_contents"> <ul> </ul> </div> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script> var content = [ {img:{url:'aaa'}, title:"test1", link:"aaa", date:"111"}, {img:{url:'bbb'}, title:"test2", link:"bbb", date:"222"}, {img:{url:'ccc'}, title:"test3", link:"ccc", date:"333"} ]; for (var i = 0; i < content.length; i++) { var img = content[i].img.url; var title = content[i].title; var date = content[i].date; var link = content[i].link; var news = "<li><div class='news_contents_img_wrap'><a target='_blank' href=" + link + "><img class='news_contents_img' src=" + img + "></a></div>" + "<div class='news_contents_info_wrap'><a class='news_contents_info_title' target='_blank' href=" + link + ">" + title + "</a>" + "<p class='news_contents_info_date'>" + date + "</p></div></li>"; $(".news_contents ul").append(news); } </script>
hope_mucci

2021/07/08 16:19

apiから取得したlinkの文字列を可能な限り完全な形で補足してください(ドメイン名だけ隠すくらいで良いです。知りたいのは末尾の状態です。) linkの一番最後が"/"になっていたりしないでしょうか?
kaoru_tujimiya

2021/07/13 08:22

ありがとうございます! linkの最後が、"/"担ってるのが原因でした。
hope_mucci

2021/07/13 14:40

やはりそうでしたか。 もうBAはついていますが、ナレッジとして一応回答に記載しておきます。
guest

回答2

0

問題文の追記・編集依頼より:

linkの一番最後が"/"になっていたりしないでしょうか?

→上記の通り、linkの末尾が "/"になっていて、

html

1"<li><div class='news_contents_img_wrap'><a target='_blank' href=" + link + "><img

のうに、hrefをクォートで括っていなかったため、例えばlink/foo/bar/baz/だった場合、生成されたタグが
<a target='_blank' href=/foo/bar/baz/><img ... の様になり、<a target='_blank' href=/foo/bar/baz/><a target='_blank' href="/foo/bar/baz" />の様に単独のタグとして扱われているのが意図通りHTMLが生成されない原因となっていると考えられます。
このような場合は、テンプレート文字列を使うとミスも少なくなって効果的です。

js

1news = `<li><div class='news_contents_img_wrap'><a target='_blank' href="${link}"><img src="${img}"> ... `;

上記の様に出力文字列をバッククォートで括り、変数の部分を${変数名}とすると変数が展開されて文字列に埋め込まれます。

投稿2021/07/13 14:48

hope_mucci

総合スコア4447

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

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

0

ベストアンサー

javascript

1<script> 2window.addEventListener('DOMContentLoaded',async()=>{ 3 const ul=document.querySelector('.news_contents ul'); 4 const data=await fetch('x.json').then(res=>res.json()); 5 data.forEach(x=>{ 6 const li=document.createElement('li'); 7 const div_img=Object.assign(document.createElement('div'),{className:'news_contents_img_wrap'}); 8 const div_info=Object.assign(document.createElement('div'),{className:'news_contents_info_wrap'}); 9 const a_img=Object.assign(document.createElement('a'),{target:'_blank',href:x.img.url}); 10 const img=Object.assign(document.createElement('img'),{className:'news_contents_img',src:'bbb'}); 11 const a_info=Object.assign(document.createElement('a'),{className:'news_contents_info_title',target:'_blank',href:x.link,textContent:x.title}); 12 const p=Object.assign(document.createElement('a'),{className:'news_contents_info_date',textContent:x.date}); 13 [[ul,li],[li,div_img],[li,div_info],[div_img,a_img],[a_img,img],[div_info,a_info],[div_info,p]].forEach(x=>{ 14 x[0].appendChild(x[1]); 15 }); 16 }); 17}); 18</script> 19<div class="news_contents"> 20<ul> 21</ul> 22</div>

投稿2021/07/09 00:52

yambejp

総合スコア116724

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問