jQuery.autopager.js 覚え書き
これは何?
AutoPagerize のようなページングを提供する、jQuery プラグイン jQuery.autopager についての覚え書き2点
iOS で動作しない!!
Mobile Safail 側の不具合が原因
jQuery 本家の BTS にチケットがたってる
バージョンに関わらず、$(window).height() が正しく取得できない
対策
var height = window.innerHeight ? window.innerHeight : $(window).height();
対策
// as of 1.4.2 the mobile safari reports wrong values on offset() // http://dev.jquery.com/ticket/6446 // remove once it's fixed if (/; CPU.*OS (?:3_2|4_0)/i.test(navigator.userAgent)) { (function($) { $.fn.offsetOld = $.fn.offset; $.fn.offset = function() { var result = this.offsetOld(); result.top -= window.scrollY; result.left -= window.scrollX; return result; }; })(jQuery); }
autopager で追加された DOM の jQuery オブジェクトが欲しい
autopager のソースより、
次ページから DOM を取ってきて、末尾にくっつける処理を行うメソッド insertContent で、
次ページから取ってきた DOM (nextContent) を this として、 options.load を call している
function insertContent(res) { var _options = options, nextPage = $('<div/>').append(res.replace(/<script(.|\s)*?\/script>/g, "")), nextContent = nextPage.find(_options.content); set('page', _options.page + 1); setUrl(nextPage); if (nextContent.length) { if (_options.insertBefore) { nextContent.insertBefore(_options.insertBefore); } else { nextContent.appendTo(_options.appendTo); } _options.load.call(nextContent.get(), currentHash(), nextHash()); content = nextContent.filter(':last'); } active = false; }
なので、options で設定した、load メソッド内で、以下のようにすればOK
$.autopager({ load: function(current, next) { // nextContent は jQuery オブジェクトではなく、DOM オブジェクトなので、$で囲う必要あり nextContent = $(this); } });
なんで this を nextContent.get() にしているのだろ?
思想が知りたい