jQuery.autopager.js 覚え書き

これは何?

AutoPagerize のようなページングを提供する、jQuery プラグイン jQuery.autopager についての覚え書き2点

iOS で動作しない!!


Mobile Safail 側の不具合が原因
jQuery 本家の BTS にチケットがたってる

バージョンに関わらず、$(window).height() が正しく取得できない
対策
 var height = window.innerHeight ? window.innerHeight : $(window).height();
iOS 3.x系(3G以前のiphone と、更新していない ipad, iphone) では、offset().top が正しく取得できない
対策
// 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() にしているのだろ?
思想が知りたい