文字列の比較が出来ずに困っております。
初歩的な質問で恐縮ですが、ご教授頂けると幸いです。
$.ajax({
url:'http://nuruta.hatenablog.com/rss',
success: function(data){
var htmlstr = "";
var x=0;
var m=0;
var eurl = new Array();
var eurl2 = new Array();
var presentCategory = $("div.entry-categories a:nth-child(2)").text();
var rss_url = 'http://nuruta.hatenablog.com/rss/category/' + presentCategory;
htmlstr += '<ul class="recent-menu">';
$.get(rss_url, function(data) {
$(data).find("item").each(function (i) {
var el = $(this);
eurl[x] = el.find("link").text().replace("/entry","/embed");
// RSSのカテゴリ
eurl2[x]=el.find("category").text()
x++;
});
// 記事のカテゴリ
var cate1 = $("div.entry-categories a").text();
while(eurl.length > 0){
mx=Math.floor(Math.random() * eurl.length);
// カテゴリの比較(※ここが出来ません)
if ( cate1 !== eurl2[mx] ) {
// 完全一致しない時の処理
}
eurl.splice(mx,1);
if (m==10){
break;
}
}
htmlstr += '</ul>';
document.getElementById("recent-box").innerHTML += htmlstr;
});
}
});
$.ajax({ //はてなrssファイルを読み込む url:'http://nuruta.hatenablog.com/rss', success: function(data){ var htmlstr = ""; var x=0; var m=0; var eurl = new Array(); var presentCategory = $("div.entry-categories a:nth-child(1)").text(); var rss_url = 'http://nuruta.hatenablog.com/rss/category/' + presentCategory; htmlstr += '<ul class="recent-menu">'; $.get(rss_url, function(data) { $(data).find("item").each(function (i) { var el = $(this); eurl[x] = el.find("link").text().replace("/entry","/embed"); x++; }); var href = window.location.href.replace("/entry","/embed"); while(eurl.length > 0){ mx=Math.floor(Math.random() * eurl.length); if (href != eurl[mx]) { htmlstr += '<li>'; htmlstr += '<iframe style="display: block; height: 180px; width:100%; min-width:200px;" src="' + eurl[mx] + '" frameborder="0" scrolling="no"></iframe>'; htmlstr += '</li>'; m=m+1; } eurl.splice(mx,1); if (m==10){ break; } } htmlstr += '</ul>'; document.getElementById("tab-body1").innerHTML += htmlstr; document.getElementById("MENU1").innerHTML += presentCategory; }); } }); $.ajax({ //はてなrssファイルを読み込む url:'http://nuruta.hatenablog.com/rss', success: function(data){ var htmlstr = ""; var x=0; var m=0; var eurl = new Array(); var eurl2 = new Array(); var presentCategory = $("div.entry-categories a:nth-child(2)").text(); var rss_url = 'http://nuruta.hatenablog.com/rss/category/' + presentCategory; htmlstr += '<ul class="recent-menu">'; $.get(rss_url, function(data) { $(data).find("item").each(function (i) { var el = $(this); eurl[x] = el.find("link").text().replace("/entry","/embed"); // RSSのカテゴリ eurl2[x]=el.find("category").text() x++; }); // 記事のカテゴリ var cate1 = $("div.entry-categories a").text(); while(eurl.length > 0){ mx=Math.floor(Math.random() * eurl.length); // カテゴリの比較(※ここが出来ません) if ( cate1 !== eurl2[mx] ) { // 完全一致しない時の処理 htmlstr += '<li>'; htmlstr += '<iframe style="display: block; height: 180px; width:100%; min-width:200px;" src="' + eurl[mx] + '" frameborder="0" scrolling="no"></iframe>'; htmlstr += '</li>'; m=m+1; } eurl.splice(mx,1); if (m==10){ break; } } htmlstr += '</ul>'; document.getElementById("tab-body2").innerHTML += htmlstr; document.getElementById("MENU2").innerHTML += presentCategory; }); } });
「○○となることを期待しているのに、××になってしまう」とか、もう少し具体的に。
カテゴリを指定した RSS からランダムにひとつ選んで、表示中の記事と比較して、全てのカテゴリが *一致しなければ* 、... というふうには動くようですけれど。
投稿文字数の関係で要領の得ない質問となっておりました。
a-kuma3さんが仰るように「表示中の記事と比較して、全てのカテゴリが一致しない時に、(ソースでは消してますが)はてなブログカードを表示させる」様にさせようと思っております。
手元の環境では、カテゴリが一致しているものも表示されてしまい、故に、比較が正しく出来ていないのかと疑っていました。
回答下さったお二方とも出来ていらっしゃるようなので、もう少し自分でも見てみます。
表示されている記事に2つカテゴリがあり、1つ目のカテゴリに関連する記事をtab-body1に表示。
2つ目のカテゴリに関連する記事をtab-body2に表示させる予定です。
2つ目のカテゴリの関連記事には、1つ目のカテゴリの関連記事も含まれるため、1つ目のカテゴリの関連記事を除こうとしてカテゴリの比較を行っています。
(最初はforループで回していたのですが、forの中にfunctionは置けないとエラーが出てしまったので、このような無理矢理なソースにしてしまいました)
$(function() {
$.ajax({
...
});
});
>投稿文字数の関係で
「質問者からの補足」を使うと良いですよ。
質問投稿したら、すぐさま補足を足しちゃう。
こんな感じ。
http://q.hatena.ne.jp/1471246492
スーパーpre 記法とか使うと、ソースのインデントもつぶれませんし。
- http://hatenadiary.g.hatena.ne.jp/keyword/%E5%85%A5%E5%8A%9B%E3%81%97%E3%81%9F%E3%82%B3%E3%83%BC%E3%83%89%E3%82%84%E3%81%AF%E3%81%A6%E3%81%AA%E8%A8%98%E6%B3%95%E3%82%92%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BE%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B%EF%BC%88%E3%82%B9%E3%83%BC%E3%83%91%E3%83%BCpre%E8%A8%98%E6%B3%95%EF%BC%89
- http://hatenadiary.g.hatena.ne.jp/keyword/%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E8%89%B2%E4%BB%98%E3%81%91%E3%81%97%E3%81%A6%E8%A8%98%E8%BF%B0%E3%81%99%E3%82%8B%EF%BC%88%E3%82%B7%E3%83%B3%E3%82%BF%E3%83%83%E3%82%AF%E3%82%B9%E3%83%BB%E3%83%8F%E3%82%A4%E3%83%A9%E3%82%A4%E3%83%88%EF%BC%89
お教え頂いた記法で捕捉を修正しました。
の後に、こんなのを入れて動かしてみると、
console.log(cate1 !== eurl2[mx], cate1, eurl2[mx], mx);
こんな感じで出力されるので、判定できてるっぽいんですけどね。
10:45:51.998 false 【アニメ】その他アニメ 【アニメ】その他アニメ 22
10:45:52.000 false 【アニメ】その他アニメ 【アニメ】その他アニメ 2
10:45:52.002 true 【アニメ】その他アニメ 【アニメ】ラブライブ!サンシャイン!!アニメ 1
10:45:52.004 true 【アニメ】その他アニメ 【アニメ】ラブライブ!サンシャイン!!アニメ 3
10:45:52.005 true 【アニメ】その他アニメ 【アニメ】ラブライブ!サンシャイン!!アニメ 7
10:45:52.006 true 【アニメ】その他アニメ 【アニメ】ラブライブ!サンシャイン!!アニメ 0
ちなみに、Bookmarklet で動かしての確認なので、ブログの方で仕込んだコードとは、動作するタイミングが違ってます。
で、いきなり $.ajax を呼んでるのが気になる、とかコメントしたわけです。
を入れて動かしてみしたが、例えば
10:45:52.005 true 【アニメ】その他アニメ 【アニメ】ラブライブ!サンシャイン!!アニメ 7
これも表示されてしまいます。
比較の部分では無く、全く別の要因が影響しているのでしょうか…。
自己解決いたしました。
2つの配列eurlとeurl2には、同じ配列番号に正しい組み合わせでそれぞれurlと(そのurlが示す記事の)カテゴリが入っているにも関わらず、
eurl.splice(mx,1);
で、片方の配列の要素数だけ削除していたことが原因でした。
片方の要素数が減ったので、組み合わせがずれてしまっていました。
ぽけっとしすてむさん、a-kuma3さん、お騒がせして申し訳ありませんでした。
コメントありがとうございました。
ああ、なるほど。
小一時間くらいで気がつかないとダメだな >a-kuma3
まだまだ青い (´・ω・`)
配列をふたつ使うんじゃなくて、オブジェクトの配列にしておけばこういうミスが入り込む余地が無いよなあ、とも思った。
$(data).find("item").each(function (i) {
...
eurl[x] = {
link: el.find("link").text().replace("/entry","/embed"),
category: el.find("category").text(),
};
x++;
});