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

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

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

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

Q&A

解決済

2回答

504閲覧

特定の要素の後ろにDOM要素を追加して$.ajaxで外部htmlを読み込んだり削除したい

srecna

総合スコア7

jQuery

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

0グッド

0クリップ

投稿2018/12/06 06:44

やりたいことは特定のリンクをクリックするとそのクリックした要素の後ろに.afterなどを使ってDOM要素を作成し、そこにajaxで別ファイルのHTMLを読み込みしたいです。

下記のリンクを参考に作成しましたがうまくいきません。
クリックをトリガーに--ajaxで外部htmlを読み込んだり削除したりする
別のページをjqueryのajaxを使って読み込み表示させる

・問題点:
クリックした要素以外に追加したDOM要素を削除したいのですがうまくいかず、すべてのリンクの後にDOM要素が追加されてしまいます。

色々試してはみましたがうまくいかず困っています。。
すいませんがご教授いただければ幸いです。
どうぞよろしくお願いいたします。

HTML

1<div class="gnavi"> 2 <div class="item"><a href="modal_A.html">1のページ</a></div> 3 <div class="item"><a href="modal_B.html">2のページ</a></div> 4 <div class="item"><a href="modal_C.html">3のページ</a></div> 5</div>

jQuery

1$(function(){ 2 $(document).on('click', '.item a', function(event) { 3 event.preventDefault(); 4 var link = $(this).attr("href"); 5 $content = $('.pageDisplay'); 6 //リンク先が今と同じであれば遷移しない 7 if(link == lastpage){ 8 return false; 9 }else{ 10 if (!$(this).next('.pageDisplay').length>0){ 11 $(this).after("<div class=\"pageDisplay\"></div>"); 12 } 13 $content.fadeOut(300, function() { 14 $.ajax({ 15 type: 'GET', 16 url: link, 17 dataType: 'html', 18 success: function(data){ 19 $('.pageDisplay').html(data).fadeIn(300); 20 modalClose(); 21 }, 22 error:function() { 23 alert('問題がありました。'); 24 } 25 }); 26 }); 27 //今のリンク先を保存 28 lastpage = link; 29 } 30 31 }); 32 //初期設定 33 var lastpage = ""; 34 35 function modalClose() { 36 $(".js-modal_close").click(function() { 37 $content.fadeOut(300); 38 }); 39 };

});

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

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

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

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

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

x_x

2018/12/06 07:04

最終的に1回のクリックで3回のリクエストが飛ぶようになりますが、これは想定通りなのでしょうか?
srecna

2018/12/06 07:18 編集

ご回答ありがとうございます。すいません、それは私の記述ミスです。そこが間違ってるんですね…一回のクリックで一回のリクエストを飛ばしたいです。
x_x

2018/12/06 07:21

アンカーをクリックして実際にリンク先に遷移してしまうのでしょうか?
srecna

2018/12/06 07:23

いいえ、実際にリンク先には遷移しません。ajaxを読み込むために使いたいです。
guest

回答2

0

こんな感じでしょうか

JavaScript

1$(function(){ 2 $(document).on('click', '.item a', function(event) { 3 event.preventDefault(); 4 var link = $(this).prop("href"); 5 if(link == lastpage){ 6 return false; 7 }else{ 8 $('.pageDisplay .js-modal_close').trigger('click'); 9 $.ajax({ 10 type: 'GET', 11 url: link, 12 dataType: 'html', 13 success: function(data){ 14 var $content = $('<div class="pageDisplay" style="display:none;"></div>').html(data); 15 $(event.currentTarget).after($content); 16 $content.fadeIn(300); 17 modalClose($content); 18 }, 19 error:function() { 20 alert('問題がありました。'); 21 } 22 }); 23 24 //今のリンク先を保存 25 lastpage = link; 26 } 27 28 }); 29 30 //初期設定 31 var lastpage = ""; 32 33 function modalClose(context) { 34 $(".js-modal_close", context).one('click', function() { 35 $(this).closest('.pageDisplay').fadeOut(300, function() { 36 $(this).off().remove(); 37 }); 38 }); 39 }; 40});

投稿2018/12/06 07:45

x_x

総合スコア13749

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

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

srecna

2018/12/06 08:26 編集

時間差で回答おくれましてすいません!ありがとうございます。こちらも思った動きでした。じっくり拝見させていただき、何が悪かったのか勉強させていただきたく存じます。どうもありがとうございました。
guest

0

ベストアンサー

<div class="gnavi">
<div class="item"><a href="modal_A.html">1のページ</a></div> <div class="item"><a href="modal_B.html">2のページ</a></div> <div class="item"><a href="modal_C.html">3のページ</a></div>
</div>

この場合「1のページ」をクリックすると

html

1<div class="gnavi"> 2 <div class="item"><a href="modal_A.html">1のページ</a></div> 3 <div id="contents">(modal_A.htmlの内容)</div> 4</div>

のようになるということでしょうか?

sample

javascript

1<script> 2$(function(){ 3 $('.item a').on('click',function(e){ 4 e.preventDefault(); 5 $.ajax({ 6 url:$(this).attr('href'), 7 dataType:'html', 8 }).done(function(html){ 9 $(e.target).after($('<div id="contents">').append(html)).closest('.item').siblings().remove(); 10 }); 11 }); 12}); 13</script> 14<div class="gnavi"> 15 <div class="item"><a href="modal_A.html">1のページ</a></div> 16 <div class="item"><a href="modal_B.html">2のページ</a></div> 17 <div class="item"><a href="modal_C.html">3のページ</a></div> 18</div>

調整版

.itemは消さない。付け足した#contentsは削除

javascript

1$(function(){ 2 $('.item a').on('click',function(e){ 3 e.preventDefault(); 4 if($(this).closest('.item').next().filter('#contents').length>0){ 5 $('#contents').remove(); 6 }else{ 7 $.ajax({ 8 url:$(this).attr('href'), 9 dataType:'html', 10 }).done(function(html){ 11 $('#contents').remove(); 12 $(e.target).closest('.item').after($('<div id="contents">').append(html)); 13 }); 14 } 15 }); 16});

投稿2018/12/06 07:28

編集2018/12/06 08:10
yambejp

総合スコア114843

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

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

srecna

2018/12/06 07:33

はいその通りです、わかりづらくて申し訳ありません。
yambejp

2018/12/06 07:36

sampleあげておきました 読み込む各ページに余計なデータや競合する情報がはいってない前提です
srecna

2018/12/06 07:49

ご回答ありがとうございます!早速試してみましたが削除の対象は作成した要素(この場合は<div id="contents">)で他のリンク要素(<div class="item">)は表示させておきたいです。あと書き忘れて申し訳ないですがもう一度リンクをクリックしたら閉じるようにしたいです。
yambejp

2018/12/06 08:10

ご提示の仕様に合わせてみました。違うようなら再度ご指摘下さい
srecna

2018/12/06 08:23

早速ありがとうございます。まさに思った通りの動きです!本当に助かりました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問