WordPress と jQuery Mobile で構築したサイトで Infinite Scroll を使ってコンテンツを読み込むと、何故か読み込まれたコンテンツのリンク(a 要素)が認識されなかったのでその解決方法に関するメモ。
PC 用のテーマでは問題がなかったことと、以下のようにするとリンク要素の色は反映されたので、最初は、jQuery Mobile の問題だと思ってしまった。
jQuery(function($){
$('#content').infinitescroll({
navSelector : ".pagenavi",
nextSelector : ".pagenavi a:last",
itemSelector : ".recent_work"
}, function (){
$( "div[data-role=page]" ).page( "destroy" ).page();
//または $( "div[data-role=page]" ).trigger('create');
});
});
いろいろと試してみたが、現象は変わらなかったため、コンテンツの中のリンク部分を個別(要素ごと)に読み込んでみると、ちゃんとリンクが機能することが判明。
読み込み対象のコンテンツ部分
<div class="work">
<p class="main_photo"><a href="<?php the_permalink(); ?>"><?php the_post_thumbnail('works'); ?></a></p>
<h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
・・・省略・・・
</div><!-- end of .work -->
切り分けたところ、外側の div 要素を読み込むと現象が発生することがわかったので、それに指定している CSS を変更してみたところ、この div 要素に指定していた「float」の指定を外すと全く問題がなくなることが判明。
#content div.recent_work {
float: left; /*これを削除して解決*/
width: 90%;
margin: 10px 0;
padding: 30px 10px;
border:1px solid #CEA6CC;
text-align: center;
background-color: #fff;
}
PC 用の CSS を流用したため本来は不要な「float」の指定だったので、削除しても問題なかったが、「float」の指定でこんな現象が発生するとは思っても見なかった。原因は特定できたが、なぜそのようになるのかは不明。