▽1
●
a-kuma3 ●100ポイント ベストアンサー |
「インスペクタ」ではなく、「ソースを見る」なんかでページを見ると表示されない理由が分かります。
「最新記事」や「関連記事」は、最初のレスポンスで中身がありますが、「人気記事」は枠だけで中身(一覧)がありません。
その後に動くスクリプトで動的に中身が作られているようです。
質問に書かれているスクリプトが、「人気記事」の一覧を作るスクリプトよりも早く動いてしまうので、「人気記事」だけ空振りしているように見えます。
setTimeout で、適当な時間遅らせて実行するというのがお手軽な対応ですが、はてなブログはただでさえ重たいので確実性に欠けるきらいがあります。
古いブラウザだと動きませんが、MutationObserver というのを使うのが確実です。
質問にあるコードを活かすと、こんな感じになります。
$(function(){ var bb = function(aa){ var urEntries = $(aa).find(".urllist-item-inner"); var i=0; urEntries.each(function(){ var urEntry = $(this); var entryTitleLink = urEntry.find(".urllist-title"); var href = entryTitleLink.attr("href"); var htmlstr = ""; htmlstr +='<p class="star-counts"><img src="http://s.st-hatena.com/entry.count.image?uri='; htmlstr +=href; htmlstr +='" alt="" class="star-count"></p>'; urEntry.after(htmlstr); }); } // bb(".hatena-module-entries-access-ranking"); こいつは中身が未だできてない bb(".hatena-module-recent-entries"); bb(".hatena-module-related-entries"); var MutationObserver = window.MutationObserver || window.WebkitMutationObserver; // Safari 対策 var observer = new MutationObserver(function (records) { records.forEach(function (record) { setTimeout(function() { bb(".hatena-module-entries-access-ranking"); }, 0); }); observer.disconnect(); // 多分、一回だけで良い }); observer.observe(document.querySelector(".hatena-module-entries-access-ranking"), {childList: true}); });
こちらを試してみてください。
$(function() { var bb = function(aa){ var urEntries = $(aa).find(".urllist-item-inner"); var i=0; urEntries.each(function(){ var urEntry = $(this); var entryTitleLink = urEntry.find(".urllist-title"); var href = entryTitleLink.attr("href"); var htmlstr = ""; htmlstr +='<p class="star-counts"><img src="http://s.st-hatena.com/entry.count.image?uri='; htmlstr +=href; htmlstr +='" alt="" class="star-count"></p>'; urEntry.after(htmlstr); console.log(htmlstr) }); } var MutationObserver = window.MutationObserver || window.WebkitMutationObserver; // Safari 対策 var observer = new MutationObserver(function (records) { records.forEach(function (record) { if (record.target.classList.contains("hatena-module-body")) { // 念のため observer.disconnect(); // 先に監視を止める bb(".hatena-module-entries-access-ranking"); } }); }); var ranking = document.querySelector(".hatena-module-entries-access-ranking"); observer.observe(ranking, {childList: true, subtree: true}); });