1
0
mirror of https://github.com/twbs/bootstrap.git synced 2025-08-09 23:26:40 +02:00

refactor(plugins): improve how we query elements

This commit is contained in:
Johann-S
2018-04-30 16:37:45 +02:00
parent 62cc0fda50
commit b1eb3fccfa
6 changed files with 34 additions and 26 deletions

View File

@@ -492,10 +492,11 @@ const Carousel = (($) => {
.on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler) .on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler)
$(window).on(Event.LOAD_DATA_API, () => { $(window).on(Event.LOAD_DATA_API, () => {
$(Selector.DATA_RIDE).each(function () { const carousels = [].slice.call(document.querySelectorAll(Selector.DATA_RIDE))
const $carousel = $(this) for (let i = 0, len = carousels.length; i < len; i++) {
const $carousel = $(carousels[i])
Carousel._jQueryInterface.call($carousel, $carousel.data()) Carousel._jQueryInterface.call($carousel, $carousel.data())
}) }
}) })
/** /**

View File

@@ -72,11 +72,14 @@ const Collapse = (($) => {
`[data-toggle="collapse"][href="#${element.id}"],` + `[data-toggle="collapse"][href="#${element.id}"],` +
`[data-toggle="collapse"][data-target="#${element.id}"]` `[data-toggle="collapse"][data-target="#${element.id}"]`
)) ))
const tabToggles = $(Selector.DATA_TOGGLE) const toggleList = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE))
for (let i = 0; i < tabToggles.length; i++) { for (let i = 0, len = toggleList.length; i < len; i++) {
const elem = tabToggles[i] const elem = toggleList[i]
const selector = Util.getSelectorFromElement(elem) const selector = Util.getSelectorFromElement(elem)
if (selector !== null && $(selector).filter(element).length > 0) { const filterElement = [].slice.call(document.querySelectorAll(selector))
.filter((foundElem) => foundElem === element)
if (selector !== null && filterElement.length > 0) {
this._selector = selector this._selector = selector
this._triggerArray.push(elem) this._triggerArray.push(elem)
} }
@@ -123,11 +126,9 @@ const Collapse = (($) => {
let activesData let activesData
if (this._parent) { if (this._parent) {
actives = $.makeArray( actives = [].slice.call(this._parent.querySelectorAll(Selector.ACTIVES))
$(this._parent) .filter((elem) => elem.getAttribute('data-parent') === this._config.parent)
.find(Selector.ACTIVES)
.filter(`[data-parent="${this._config.parent}"]`)
)
if (actives.length === 0) { if (actives.length === 0) {
actives = null actives = null
} }
@@ -216,12 +217,13 @@ const Collapse = (($) => {
.removeClass(ClassName.COLLAPSE) .removeClass(ClassName.COLLAPSE)
.removeClass(ClassName.SHOW) .removeClass(ClassName.SHOW)
if (this._triggerArray.length > 0) { const triggerArrayLength = this._triggerArray.length
for (let i = 0; i < this._triggerArray.length; i++) { if (triggerArrayLength > 0) {
for (let i = 0; i < triggerArrayLength; i++) {
const trigger = this._triggerArray[i] const trigger = this._triggerArray[i]
const selector = Util.getSelectorFromElement(trigger) const selector = Util.getSelectorFromElement(trigger)
if (selector !== null) { if (selector !== null) {
const $elem = $(selector) const $elem = $([].slice.call(document.querySelectorAll(selector)))
if (!$elem.hasClass(ClassName.SHOW)) { if (!$elem.hasClass(ClassName.SHOW)) {
$(trigger).addClass(ClassName.COLLAPSED) $(trigger).addClass(ClassName.COLLAPSED)
.attr('aria-expanded', false) .attr('aria-expanded', false)

View File

@@ -333,8 +333,8 @@ const Dropdown = (($) => {
return return
} }
const toggles = $.makeArray($(Selector.DATA_TOGGLE)) const toggles = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE))
for (let i = 0; i < toggles.length; i++) { for (let i = 0, len = toggles.length; i < len; i++) {
const parent = Dropdown._getParentFromElement(toggles[i]) const parent = Dropdown._getParentFromElement(toggles[i])
const context = $(toggles[i]).data(DATA_KEY) const context = $(toggles[i]).data(DATA_KEY)
const relatedTarget = { const relatedTarget = {

View File

@@ -430,23 +430,26 @@ const Modal = (($) => {
if (this._isBodyOverflowing) { if (this._isBodyOverflowing) {
// Note: DOMNode.style.paddingRight returns the actual value or '' if not set // Note: DOMNode.style.paddingRight returns the actual value or '' if not set
// while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set
const fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT))
const stickyContent = [].slice.call(document.querySelectorAll(Selector.STICKY_CONTENT))
const navbarToggler = [].slice.call(document.querySelectorAll(Selector.NAVBAR_TOGGLER))
// Adjust fixed content padding // Adjust fixed content padding
$(Selector.FIXED_CONTENT).each((index, element) => { $(fixedContent).each((index, element) => {
const actualPadding = $(element)[0].style.paddingRight const actualPadding = $(element)[0].style.paddingRight
const calculatedPadding = $(element).css('padding-right') const calculatedPadding = $(element).css('padding-right')
$(element).data('padding-right', actualPadding).css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`) $(element).data('padding-right', actualPadding).css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)
}) })
// Adjust sticky content margin // Adjust sticky content margin
$(Selector.STICKY_CONTENT).each((index, element) => { $(stickyContent).each((index, element) => {
const actualMargin = $(element)[0].style.marginRight const actualMargin = $(element)[0].style.marginRight
const calculatedMargin = $(element).css('margin-right') const calculatedMargin = $(element).css('margin-right')
$(element).data('margin-right', actualMargin).css('margin-right', `${parseFloat(calculatedMargin) - this._scrollbarWidth}px`) $(element).data('margin-right', actualMargin).css('margin-right', `${parseFloat(calculatedMargin) - this._scrollbarWidth}px`)
}) })
// Adjust navbar-toggler margin // Adjust navbar-toggler margin
$(Selector.NAVBAR_TOGGLER).each((index, element) => { $(navbarToggler).each((index, element) => {
const actualMargin = $(element)[0].style.marginRight const actualMargin = $(element)[0].style.marginRight
const calculatedMargin = $(element).css('margin-right') const calculatedMargin = $(element).css('margin-right')
$(element).data('margin-right', actualMargin).css('margin-right', `${parseFloat(calculatedMargin) + this._scrollbarWidth}px`) $(element).data('margin-right', actualMargin).css('margin-right', `${parseFloat(calculatedMargin) + this._scrollbarWidth}px`)
@@ -461,7 +464,8 @@ const Modal = (($) => {
_resetScrollbar() { _resetScrollbar() {
// Restore fixed content padding // Restore fixed content padding
$(Selector.FIXED_CONTENT).each((index, element) => { const fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT))
$(fixedContent).each((index, element) => {
const padding = $(element).data('padding-right') const padding = $(element).data('padding-right')
if (typeof padding !== 'undefined') { if (typeof padding !== 'undefined') {
$(element).css('padding-right', padding).removeData('padding-right') $(element).css('padding-right', padding).removeData('padding-right')

View File

@@ -225,7 +225,8 @@ const ScrollSpy = (($) => {
return return
} }
for (let i = this._offsets.length; i--;) { const offsetLength = this._offsets.length
for (let i = offsetLength; i--;) {
const isActiveTarget = this._activeTarget !== this._targets[i] && const isActiveTarget = this._activeTarget !== this._targets[i] &&
scrollTop >= this._offsets[i] && scrollTop >= this._offsets[i] &&
(typeof this._offsets[i + 1] === 'undefined' || (typeof this._offsets[i + 1] === 'undefined' ||
@@ -302,9 +303,10 @@ const ScrollSpy = (($) => {
*/ */
$(window).on(Event.LOAD_DATA_API, () => { $(window).on(Event.LOAD_DATA_API, () => {
const scrollSpys = $.makeArray($(Selector.DATA_SPY)) const scrollSpys = [].slice.call(document.querySelectorAll(Selector.DATA_SPY))
for (let i = scrollSpys.length; i--;) { const scrollSpysLength = scrollSpys.length
for (let i = scrollSpysLength; i--;) {
const $spy = $(scrollSpys[i]) const $spy = $(scrollSpys[i])
ScrollSpy._jQueryInterface.call($spy, $spy.data()) ScrollSpy._jQueryInterface.call($spy, $spy.data())
} }

View File

@@ -82,8 +82,7 @@ const Util = (($) => {
} }
try { try {
const $selector = $(document).find(selector) return document.querySelector(selector) ? selector : null
return $selector.length > 0 ? selector : null
} catch (err) { } catch (err) {
return null return null
} }