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

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

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

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

JavaScript

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

HTML

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

Q&A

解決済

1回答

4028閲覧

XML読み込みで表示してるHTMLにJSを効かせたい

退会済みユーザー

退会済みユーザー

総合スコア0

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

JavaScript

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

HTML

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

0グッド

0クリップ

投稿2016/09/09 16:00

編集2016/09/09 16:09

###前提・実現したいこと
フォトギャラリーのHTMLページで、「もっと見る」を押すと10件ずつ表示されていく仕組みを実装中です。
写真のリスト部分は、jQueryでXMLを読み込み、HTMLに表示させているため、
ページ側に「もっと見る」のJSを書いても効きません。

XMLを読み込むJSかページ側のJS、どちらでもよいのですが、
「もっと見る」が効くようにするにはどうしたらいいでしょうか。

JSを自分で書く知識がないので、ぜひよろしくお願いいたします。

###発生している問題・エラーメッセージ
XMLで読み込まず、ソースを直接ページに書けば、「もっと見る」は動作していますが、
XML読み込みだと、そもそも全部が出た状態になってしまいます。

###該当のソースコード
■XML読み込みのJS

$(function(){ $.ajax({ url:'/photolist.xml', type:'GET', dataType:'xml', timeout:1000, error:function() { alert("ロード失敗"); }, success:function(xml){ $(xml).find("entry").each(function() { data_append( $(this).find('name').text(), $(this).find('photo').text(), $(this).find('caption').text() ); }); } }); function data_append(name, photo, caption) { $("#photoList ul").append('<li>' + '<img src="images/'+ photo +'" alt="'+ name +'" />' + '<p class="cap">'+ caption +'</p>' + '</li>'); } });

■10件ずつ表示JS(上記とは別の外部ファイル)

$(function(){ var n = $("#photoList li").length; $("#photoList li:gt(9)").hide(); var Num = 10; $("#more").click(function(){ Num +=10; $("#photoList li:lt("+Num+")").show(400); if(n <= Num){ $("#more").hide(); } }) });

###試したこと
XML読み込みのJSに10件ずつ表示JSを書くと、
ループして、表示件数分同じ記述が出てしまって、ダメでした。

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

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

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

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

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

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

kei344

2016/09/09 16:05

コードはコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
退会済みユーザー

退会済みユーザー

2016/09/09 16:10

ご指摘ありがとうございます。修正いたしました。
guest

回答1

0

ベストアンサー

書いておられるコードでは、「n」が更新されないため、XMLで追加した要素が残っていても「#more」が消えてしまうのでは。また、追加時に消えていないために、全て表示されるのではないでしょうか。

CSS

1.off { 2 display: none; 3}

JavaScript

1$( function() { 2 var Num = 10; 3 $( '#photoList li:gt(9)' ).addClass( 'off' ); 4 5 $( '#more' ).on( 'click', function() { 6 var n = $( '#photoList li.off' ).length; 7 $( '#photoList li.off:lt(' + Num + ')' ).removeClass( 'off' ); 8 if ( n - Num < 1 ) { 9 $( '#more' ).hide(); 10 } 11 } ); 12 13 $( '#photoList' ).on( 'additem', function() { // カスタムイベントに紐付け 14 var n = $( '#photoList li.off' ).length; 15 if ( n > 0 ) { 16 $( '#more' ).show(); 17 } 18 } ); 19 20 function data_append( name, photo, caption ) { 21 $( '#photoList ul' ).append( '<li class="off">' // 追加時に非表示にしておく 22 + '<img src="'+ photo +'" alt="'+ name +'" />' 23 + '<p class="cap">'+ caption +'</p>' 24 + '</li>' 25 ); 26 27 } 28 29 // for Test (ここ以降はテスト用なので、XMLの呼び出しと思ってください) 30 $( '#fake-ajax' ).on( 'click', function() { 31 var rand = Math.floor( Math.random() * 11 ); // なんとなく追加数が変わっても、というためにランダムで要素を作っています。(特に意味なし) 32 for ( var i = 0; i < rand; i++ ) { // $(xml).find("entry").each() の代わり 33 data_append( 'name:' + i, 'https://placehold.jp/12/cc9999/993333/60x20.png', 'caption:' + i ); 34 } 35 // XMLからのロード後に実行(これが重要) 36 $( '#photoList' ).trigger( 'additem' ); // カスタムイベントを実行(#moreを再表示させるため) 37 } ).click(); 38 $( '#more' ).click(); //(このサンプル用の記述なので無視してください) 39} ); 40```**動くサンプル:**[https://jsfiddle.net/u3nomftf/](https://jsfiddle.net/u3nomftf/)

投稿2016/09/09 16:59

kei344

総合スコア69407

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

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

退会済みユーザー

退会済みユーザー

2016/09/09 17:33

ありがとうございます。 XMLを読み込んで、無事「もっと見る」を押すと10件ずつ出てくるようになりました。 ただ初期状態は、表示0件で「もっと見る」だけが出てる状態になってしまいました。 初期は11件出ててほしいのですが、どのようにしたらよいでしょうか。
kei344

2016/09/09 17:39

どのような実装をされたかによりますが、とりあえず11件までクラス「off」を付けなければ表示11件が実現出来ます。なので$( '#more' ).click();で強制的に10件表示とか、$( '#photoList li.off:lt(11)' ).removeClass( 'off' );とかすれば良いのではないでしょうか。
退会済みユーザー

退会済みユーザー

2016/09/09 18:00

ありがとうございます!無事、解決できました。 いろいろとご対応いただき、本当に助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問