').append(html));\r\n });\r\n }\r\n });\r\n});\r\n```","dateModified":"2018-12-06T08:09:57.174Z","datePublished":"2018-12-06T07:28:06.512Z","upvoteCount":2,"url":"https://teratail.com/questions/162423#reply-242839"},"suggestedAnswer":[{"@type":"Answer","text":"こんな感じでしょうか\r\n```JavaScript\r\n$(function(){\r\n $(document).on('click', '.item a', function(event) {\r\n event.preventDefault();\r\n var link = $(this).prop(\"href\");\r\n if(link == lastpage){\r\n return false;\r\n }else{\r\n $('.pageDisplay .js-modal_close').trigger('click');\r\n $.ajax({\r\n type: 'GET',\r\n url: link,\r\n dataType: 'html',\r\n success: function(data){\r\n var $content = $('
').html(data);\r\n $(event.currentTarget).after($content); \r\n $content.fadeIn(300);\r\n modalClose($content);\r\n },\r\n error:function() {\r\n alert('問題がありました。');\r\n }\r\n });\r\n\r\n //今のリンク先を保存\r\n lastpage = link;\r\n }\r\n\r\n });\r\n\r\n //初期設定\r\n var lastpage = \"\";\r\n\r\n function modalClose(context) {\r\n $(\".js-modal_close\", context).one('click', function() {\r\n $(this).closest('.pageDisplay').fadeOut(300, function() {\r\n $(this).off().remove();\r\n });\r\n });\r\n };\r\n});\r\n```","dateModified":"2018-12-06T07:45:19.951Z","datePublished":"2018-12-06T07:45:19.951Z","upvoteCount":2,"url":"https://teratail.com/questions/162423#reply-242842","comment":[{"@type":"Comment","text":"時間差で回答おくれましてすいません!ありがとうございます。こちらも思った動きでした。じっくり拝見させていただき、何が悪かったのか勉強させていただきたく存じます。どうもありがとうございました。","datePublished":"2018-12-06T08:25:51.961Z","dateModified":"2018-12-06T08:26:08.347Z"}]}],"breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"トップ","url":"https://teratail.com"},{"@type":"ListItem","position":2,"name":"jQueryに関する質問","url":"https://teratail.com/tags/jQuery"},{"@type":"ListItem","position":3,"name":"jQuery","url":"https://teratail.com/tags/jQuery"}]}}}
やりたいことは特定のリンクをクリックするとそのクリックした要素の後ろに.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 };
});
こんな感じでしょうか
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});
ベストアンサー
<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});
15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.29%

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

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