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

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

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

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

jQuery

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

Q&A

解決済

2回答

373閲覧

RSSで取得したオブジェクトの数を取得したい

ZZ-TOP

総合スコア36

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2019/04/28 03:45

パソコンスクールでJavaScriptを勉強しています。

配信されているRSSのXMLファイルをダウンロードして
ページ上に出力するという課題の勉強をしています。

※サンプルのコードは以下の通りです。

ajaxについて、月を英字で表示する、日を2桁表示する
(2桁表示 = 1→01)、etc.いろいろ学びました。

その中で今度は
ダウンロードしたXMLファイルの中にオブジェクトが何個あるのか求める
という課題になりました。

※オブジェクト:ページ上に出力する記事の数
=xmlファイルからダウンロードした「title」タグの個数

私の考えでは以下のコードの「1番」でtitleタグの数を取得して
コンソールに出力できると思っていました。

ですが画像の通り「1番」のコンソールへの出力結果は「0」になります。
「3番」の結果が「[]」になることも含めて
配列型で変数の宣言をすることが間違っているのだと思います。

すいませんが正しい変数の宣言を含め、
以下のサンプルコードで記事の数(ダウンロードしたtitleタグ)を
取得する方法を教えて下さい。

※取得した結果の出力先はコンソールでOKです。

追記
コンソールへの出力は「5番」までありますが、
「2番」、「4番」、「5番」は動作確認のため出力してみただけです。
今回の処理とは無関係です。

お手数ですが、詳しい方、説明の上手な方
よろしくお願いします。

Html

1<br> 2<p>titlId</p> 3 4<ul id="titlId" style="padding: 0px 10px;"></ul> 5 6<br> 7<br> 8 9<script src="http://code.jquery.com/jquery-1.11.3.min.js"></script> 10 11

JavaScript

1<script> 2//配列型で宣言 3var GlbtitNo = []; 4 5//文字列型で宣言 6var GlbtitSt = String; 7 8//1番 配列型 9console.log(GlbtitNo.length); 10 11//2番 文字列型 12console.log(GlbtitSt.length); 13console.log(); //スペース用 14 15//3番  配列型 16console.log(GlbtitNo); 17 18//4番 文字列型 19console.log(GlbtitSt); 20 21//スペース用 22console.log(''); 23 24$(document).ready(function() { 25 var rssURL = "https://book.studio947.net/feed/" 26 $.ajax({ 27 url: 'cdxml.php', 28 type: 'GET', 29 dataType: 'xml', 30 data: { 31 url: rssURL 32 } 33 }) 34 35 .done(function(data) { 36 $(data).find('item').each(function() { 37 var titRSS = $(this).find('title').text(); 38 var likRSS = $(this).find('link').text(); 39 40 //グローバル変数用 41 GlbtitNo = titRSS; 42 GlbtitSt = titRSS; 43 44 //5番 文字数 45 console.log(titRSS.length); 46 47 var dteRSS = $(this).find('pubDate').text(); 48 var DateOj = new Date(dteRSS) 49 50 var dateDg = DateOj.getDate() 51 52 addZero = function(num, digit) { 53 var numString = String(num); 54 while (numString.length < digit) { 55 numString = '0' + numString; 56 } 57 return numString; 58 } 59 60 var montEg = ['Jan', 'Feb', 'Mar', 'Apl', 'May', 'Jun', 'Jul', 'Aug', 61 'Sep.', 'Oct', 'Nov', 'Dec' 62 ] 63 64 var DateAp = ' ' + DateOj.getFullYear() + '/' + montEg[DateOj.getMonth()] + 65 '/' + addZero(dateDg, 2); 66 67 $('#titlId') 68 .append($('<li></li>') 69 70 .append($('<a target="_blank"></a>').attr('href', likRSS).text( 71 titRSS)) 72 .append(DateAp) 73 ) 74 75 }); //each 76 }) //done 77 78 .fail(function() { 79 window.alert('読み込みエラー'); 80 }) //fail 81}); //ready 82</script> 83

php

1<?php 2if(isset($_GET["url"]) && preg_match("/^https?:/",$_GET["url"])){ 3 $ch = curl_init($_GET["url"]); 4 curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 5 curl_setopt($ch, CURLOPT_TIMEOUT, 60); 6 $data = curl_exec($ch); 7 curl_close($ch); 8 echo $data; 9}else{ 10 echo "ERROR!"; 11}

ブラウザーの画面
※文字数は記事の個数分=10個出力されています。画面は2個の所で切り取っています。
出力結果

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

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

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

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

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

guest

回答2

0

※オブジェクト:ページ上に出力する記事の数

=xmlファイルからダウンロードした「title」タグの個数

RSS自体のtitleがあるのでイコールではありません。
itemの数を数えましょう。

投稿2019/04/28 04:17

kei344

総合スコア69400

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

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

ZZ-TOP

2019/04/28 05:11

回答して頂きありがとうございます。 >RSS自体のtitleがあるのでイコールではありません。 itemの数を数えましょう。 ↓ 確認してみましたが、今回の場合RSS自体にtitleタグはないと思いますよ。 RSSの配信先はガイドブックにある学習用のものですから。 それはともかく「itemの数を数えましょう。」というのは、 同じ方法で配列型の変数に代入してみなさい。 という意味だと思います。 アドバイス通りやってみましたが やはり結果は同じでitemタグの場合でも「0」になります。 もしかしたら、こちらの知識不足で アドバイスして頂いたこの意味を把握していなかったらすいません。 ------ itemタグやtitleタグの数を数えるためには 一度、変数に代入する必要があると思うのですが、 変数は配列型で良いのでしょうか? こちらの知識不足のせいて、アドバイスして頂いたことがよくわからない場合があります。 そのためYes-Noで答えて頂けるように書き換えてみました。 とりあえず、先に以下のことだけ教えて頂ければうれしいです。 itemタグやtitleタグの数を数えるためには 1)一度、変数に代入する必要がある? Yes / No 1-Yes) 変数の型は宣言は何型で行いますか? ※今回のコードで使える書式で記載して下さい var = 1-No) 変数に代入して「length」プロパティで取得する 以外の方法でがあるのでしたら教えて下さい。 ※こちらの知識不足で理解できないかもしれません。 ストレスのない範囲で大丈夫です。 よろしくお願いします。
kei344

2019/04/28 05:31

> RSSの配信先はガイドブックにある学習用のものですから。 https://book.studio947.net/feed/ これではないのでしょうか。 > 同じ方法で配列型の変数に代入してみなさい。 違います。 「jQuery 要素 数」で検索。
ZZ-TOP

2019/04/28 05:40

早速の回答ありがとうございます。 これから「「jQuery 要素 数」で検索」で調べます それは良いのですが、すいませんが itemタグやtitleタグの数を数えるためには 1)一度、変数に代入する必要がある? Yes / No も教えて下さい。 とにかく知識不足なので、調べるのは良いのですが クリアできることから 1つづつクリアして行きたいと思っていますので。
kei344

2019/04/28 05:53

> も教えて下さい。 「違います。」と書いていますよ。 > 1つづつクリアして行きたいと思っていますので。 それなら、入門書を最初から読むことをお勧めします。 たとえば「文字列型で宣言」と書かれていますが、そういう書き方はありません。配列のほうも変数を宣言して空配列を初期値に指定しているだけです。また、それに続くconsole.log();の使い方も変です。空の配列を用意して要素数が0な事を確認して、何の値が出ると思ったのでしょう。 その段階で非同期処理を含むコードを書くのは気が早いと思います。
ZZ-TOP

2019/04/28 06:06

回答して頂きありがとうございます > も教えて下さい。 「違います。」と書いていますよ。 ↓ すいません。 要するに、「No」ということで変数に代入しなくても良いということですね。 これだけわかったので、とりあえず納得です。 >配列のほうも変数を宣言して空配列を初期値に指定しているだけです。 ↓ そういうことなのですね。わかりました、初期値に指定するとスコープ内での処理が 配列型で入るのだと思っていました。 >それに続くconsole.log();の使い方も変です。空の配列を用意して要素数が0な事を確認して、何の値が出ると思ったのでしょう。 ↓ 違います。 「console.log(); //スペース用」と記載したので わかって頂けると思っていましたが書き方が悪かったですね。 ブラウザーのコンソールに出力された時に 結果ばかりが縦にたくさん並ぶと見にくいので、 見やすいように1行開けるために空出力しています。 今、頑張ってます。 いろいろありがとうございます。
kei344

2019/04/28 06:52

> 見やすいように1行開けるために空出力しています。 そこではなく、結果に対しての「配列型で変数の宣言をすることが間違っているのだと思います。 」という結論自体がおかしいです。 再掲:「空の配列を用意して要素数が0な事を確認して、何の値が出ると思ったのでしょう。」 ここで言う「空の配列」は「GlbtitNo」です。それのlengthは何も入っていないのだから0です。何も入れていないのだから当然そうなりますが、何が出ると思ったのでしょう、と書いています。
ZZ-TOP

2019/04/28 07:32

回答して頂きありがとうございます。 >再掲:「空の配列を用意して要素数が0な事を確認して、何の値が出ると思ったのでしょう。」 ここで言う「空の配列」は「GlbtitNo」です。それのlengthは何も入っていないのだから0です。何も入れていないのだから当然そうなりますが、何が出ると思ったのでしょう、と書いています。 ↓ 今回のコードの中の「3番」のことですね。 エラーメッセージが表示されたら メッセージを確認するつもりでしたが、 「0」でもエラーにならないし、 まぎらわしいので消しておいた方が良かったですね。 いずれにしても、何度もコメントして頂いたことの意味は理解しました。 変数に代入せずともjQueryで要素の数を数えれば良いだけ、、、。 ということだと思います。 今の私の実力で、今すぐなんとかなる範囲ではないので、 今回はここで区切っておきます。 ※質問は開けておきます。自分なりに後でまとめたいので。 何度もコメントして頂きありがとうございます。 私の知識不足で解決しませんでしたが、いろいろ参考になりました。 機会がありましたら、またお願いします。
guest

0

自己解決

自己解決してます。アップするのを忘れておりすいません。

こちら教えて頂いたアドバイスでは「item」の数を数えなさいということでしたが、
抽象的なアドバイスで、私の知識では解答の意味がわかりませんでした。

パソコンスクールの課題だったので、先生からの回答は以下の通りです。

「title」タグを取得して、ページ上に出力している
=「繰り返し処理をしている」、「nodelistを取得している」ということなので、

「nodelistの番号を取得してコンソールに出力する」というのが、
先生からの回答でした。

関数内でのnodelistの番号を取得する方法は関数の第1引数を取得すれば良いのですが、
ポイントが2つあり以下の通りです

1)nodelistの番号は「0」から始まるので、最後に「+1」する
2)取得した番号は関数のスコープの中でしか使えないのでグローバル変数に変換する

ということでした。コードは以下の通りです。

※JavaScript/jQueryだけです。 phpの変更は不要です。
※HTMLのコードは前述のコードと同じです=jQueryへのリンクが必要です

JavaScript

1<script> 2 3 4$(document).ready(function(){ 5var rssURL="https://book.studio947.net/feed/" 6$.ajax({url: 'cdxml.php',type: 'GET',dataType: 'xml',data: {url: rssURL} }) 7 8.done(function(data){ 9$(data).find('item').each(function(i){ 10var titRSS=$(this).find('title').text(); 11var likRSS=$(this).find('link').text(); 12 13var ItemRSS=$(this).find('item').text(); 14 15var dteRSS=$(this).find('pubDate').text(); 16var DateOj=new Date(dteRSS) 17 18var dateDg=DateOj.getDate() 19 20addZero=function(num,digit){ 21var numString=String(num); 22while(numString.length<digit){ 23numString='0'+numString; 24} 25return numString; 26} 27 28var montEg=['Jan','Feb','Mar','Apl','May','Jun','Jul','Aug','Sep.','Oct','Nov','Dec'] 29 30var DateAp=' '+DateOj.getFullYear()+'/'+montEg[DateOj.getMonth()]+'/'+addZero(dateDg,2); 31 32$('#titlId') 33.append($('<li></li>') 34 35.append($('<a target="_blank"></a>').attr('href',likRSS).text(titRSS)) 36.append(DateAp) 37) 38 39// スコープ外に出すためにいったんグローバル変数に置き換える 40k=i 41 42});//each 43 44console.log(k+1+'個'); 45}) //done 46 47.fail(function(){window.alert('読み込みエラー'); 48}) //fail 49}); //ready 50 51 52</script> 53

投稿2019/06/13 15:26

ZZ-TOP

総合スコア36

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問