fix scrollspy for window *and* children

This commit is contained in:
fat 2013-07-26 22:24:51 -07:00
parent 2cf1851d9f
commit cfa4ab90f3
3 changed files with 11 additions and 7 deletions

View File

@ -1569,10 +1569,10 @@ if (!jQuery) { throw new Error("Bootstrap requires jQuery") }
function ScrollSpy(element, options) {
var href
var process = $.proxy(this.process, this)
var $element = $(element).is('body') ? $(window) : $(element)
this.$element = $(element).is('body') ? $(window) : $(element)
this.$body = $('body')
this.$scrollElement = $element.on('scroll.bs.scroll-spy.data-api', process)
this.$scrollElement = this.$element.on('scroll.bs.scroll-spy.data-api', process)
this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
this.selector = (this.options.target
|| ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
@ -1590,6 +1590,8 @@ if (!jQuery) { throw new Error("Bootstrap requires jQuery") }
}
ScrollSpy.prototype.refresh = function () {
var offsetMethod = this.$element[0] == window ? 'offset' : 'position'
this.offsets = $([])
this.targets = $([])
@ -1603,7 +1605,7 @@ if (!jQuery) { throw new Error("Bootstrap requires jQuery") }
return ($href
&& $href.length
&& [[ $href.offset().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]]) || null
&& [[ $href[offsetMethod]().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]]) || null
})
.sort(function (a, b) { return a[0] - b[0] })
.each(function () {

File diff suppressed because one or more lines are too long

View File

@ -26,10 +26,10 @@
function ScrollSpy(element, options) {
var href
var process = $.proxy(this.process, this)
var $element = $(element).is('body') ? $(window) : $(element)
this.$element = $(element).is('body') ? $(window) : $(element)
this.$body = $('body')
this.$scrollElement = $element.on('scroll.bs.scroll-spy.data-api', process)
this.$scrollElement = this.$element.on('scroll.bs.scroll-spy.data-api', process)
this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
this.selector = (this.options.target
|| ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
@ -47,6 +47,8 @@
}
ScrollSpy.prototype.refresh = function () {
var offsetMethod = this.$element[0] == window ? 'offset' : 'position'
this.offsets = $([])
this.targets = $([])
@ -60,7 +62,7 @@
return ($href
&& $href.length
&& [[ $href.offset().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]]) || null
&& [[ $href[offsetMethod]().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]]) || null
})
.sort(function (a, b) { return a[0] - b[0] })
.each(function () {