崩溃时的jQuery扩展器

崩溃时的jQuery扩展器,jquery,Jquery,我使用的是多读少读类型的情况,效果很好。我想在用户单击“少读”后滚动到文章的标题。我试图找出代码,但我对jQuery不太熟悉 $('.expand_please').expander({ slicePoint: 1000, widow: 2, expandEffect: 'show', userCollapseText: 'Read less', expandText: 'Read more', onCollapse: $(this).closest('h2').scro

我使用的是多读少读类型的情况,效果很好。我想在用户单击“少读”后滚动到文章的标题。我试图找出代码,但我对jQuery不太熟悉

$('.expand_please').expander({
  slicePoint: 1000,
  widow: 2,
  expandEffect: 'show',
  userCollapseText: 'Read less',
  expandText: 'Read more',
  onCollapse: $(this).closest('h2').scroll()
});
编辑:相关HTML:

<div class="row keyline" id="show_article1">
  <h2 style="margin-bottom: 1em;">TITLE</h2>
  <div class="link_article" style="display: none;"><a href="/share/thomas/more/18" data-remote="true">READ MORE</a></div>
  <div class="fivecol">
    <img alt="thumbnail" class="thumbnail" src="/system/thumb.jpg">
  </div>
  <div class="sevencol last expand_please marginer"><div class="summary" style="display: none;">
  ARTICLE BODY TEXT
  <span class="read-less"><a href="#">Read less</a></span>
  </div>
</div>

标题
第条正文案文

我相信onCollapse希望在扩展器崩溃时调用一个函数。您还需要查找jQuery的.scrollTop方法not.scroll。scroll将处理程序附加到scroll事件。 试试下面的方法

$('.expand_please').expander({
    slicePoint: 1000,
    widow: 2,
    expandEffect: 'show',
    userCollapseText: 'Read less',
    expandText: 'Read more',
    onCollapse: function () {
        $('body').scrollTop($(this).closest('h2').offset().top);
    }
});
更新:.closest()将不起作用,因为它会查找匹配元素集的祖先。在提供的HTML中,您实际上是在尝试选择兄弟姐妹,例如

$(this).siblings('h2').first().offset().top

要滚动到相关元素,只需获取其
offset().top
值,并将该值传递给
animate()
方法

看起来是这样的:

$('.expand_please').expander({
      slicePoint: 1000,
      widow: 2,
      expandEffect: 'show',
      userCollapseText: 'Read less',
      expandText: 'Read more',
      onCollapse: function(){
        var amount = $(this).siblings('h2:first').offset().top;
        $('body, html').animate({scrollTop : amount},800);

      }
});
显然,上述方法将
动画化
滚动,这是一种很好的方法,但是如果您只需要更基本的东西,您可以使用
元素.scrollIntoView(true)1

在您的情况下,这将是:

...
onCollapse: function(){
    // pass true to align with top of scroll area
    // pass false to align with bottom of scroll area
    $(this).siblings('h2:first').scrollIntoView(true)
}
...
一,


有希望!不过,这确实会产生一个错误,我不知道如何解释:
uncaughttypeerror:无法读取未定义的属性“top”。“scrollTop”的参数必须是您希望页面滚动到的px中的位置。该错误意味着“$(this).closest('h2')”没有返回任何元素。HTML是什么样子的?太好了!非常感谢。在简化HTML代码之前,我没有意识到他们是兄弟姐妹。这会返回与@jwags解决方案相同的错误,即:
无法读取未定义的
的属性“top”。有什么想法吗?用
h2:first
(我更喜欢这样做)而不是
first()
,更新我的答案以供参考-相同的结果,不同的方法。