diff --git a/js/src/collapse.js b/js/src/collapse.js index 693e7ee2c8..3b8c15212c 100644 --- a/js/src/collapse.js +++ b/js/src/collapse.js @@ -72,7 +72,6 @@ class Collapse { this._element = element this._config = this._getConfig(config) this._triggerArray = SelectorEngine.find( - `${SELECTOR_DATA_TOGGLE}[href="#${element.id}"],` + `${SELECTOR_DATA_TOGGLE}[data-target="#${element.id}"]` ) diff --git a/js/src/scrollspy.js b/js/src/scrollspy.js index 90e03b0007..ff80de7674 100644 --- a/js/src/scrollspy.js +++ b/js/src/scrollspy.js @@ -121,7 +121,7 @@ class ScrollSpy { targets .map(element => { let target - const targetSelector = getSelectorFromElement(element) + const targetSelector = this._getSelectorFromElement(element) if (targetSelector) { target = SelectorEngine.findOne(targetSelector) @@ -163,6 +163,18 @@ class ScrollSpy { // Private + _getSelectorFromElement(element) { + let selector = getSelectorFromElement(element) + + if (!selector) { + const hrefAttr = element.getAttribute('href') + + selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null + } + + return selector + } + _getConfig(config) { config = { ...Default, diff --git a/js/src/util/index.js b/js/src/util/index.js index d9a975554c..e508908c43 100644 --- a/js/src/util/index.js +++ b/js/src/util/index.js @@ -33,12 +33,10 @@ const getUID = prefix => { } const getSelector = element => { - let selector = element.getAttribute('data-target') + const selector = element.getAttribute('data-target') - if (!selector || selector === '#') { - const hrefAttr = element.getAttribute('href') - - selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null + if (!selector) { + return null } return selector diff --git a/js/tests/unit/collapse.spec.js b/js/tests/unit/collapse.spec.js index a5e101aad1..fcf3adfa57 100644 --- a/js/tests/unit/collapse.spec.js +++ b/js/tests/unit/collapse.spec.js @@ -376,7 +376,7 @@ describe('Collapse', () => { describe('data-api', () => { it('should show multiple collapsed elements', done => { fixtureEl.innerHTML = [ - '', + '', '
', '
' ].join('') @@ -398,7 +398,7 @@ describe('Collapse', () => { it('should hide multiple collapsed elements', done => { fixtureEl.innerHTML = [ - '', + '', '
', '
' ].join('') @@ -466,11 +466,11 @@ describe('Collapse', () => { fixtureEl.innerHTML = [ '
', '
', - ' ', + ' ', '
', '
', '
', - ' ', + ' ', '
', '
', '
' @@ -521,13 +521,13 @@ describe('Collapse', () => { '
', '
', '
', - ' ', + ' ', '
', '
', '
', '
', '
', - ' ', + ' ', '
', '
', '
', @@ -647,18 +647,18 @@ describe('Collapse', () => { fixtureEl.innerHTML = [ '
', '
', - ' ', + ' ', '
', '
', '
', - ' ', + ' ', '
', '
', '
', '
', '
', '
', - ' ', + ' ', '
', '
', '
' @@ -703,9 +703,9 @@ describe('Collapse', () => { it('should add "collapsed" class and set aria-expanded to triggers only when all the targeted collapse are hidden', done => { fixtureEl.innerHTML = [ - '', - '', - '', + '', + '', + '', '
', '
' ].join('') diff --git a/js/tests/unit/dropdown.spec.js b/js/tests/unit/dropdown.spec.js index c7f05ed22a..cf32c56c0e 100644 --- a/js/tests/unit/dropdown.spec.js +++ b/js/tests/unit/dropdown.spec.js @@ -1086,9 +1086,9 @@ describe('Dropdown', () => { fixtureEl.innerHTML = [ '', @@ -1138,9 +1138,9 @@ describe('Dropdown', () => { it('should remove "show" class if body if tabbing outside of menu, with multiple dropdowns', done => { fixtureEl.innerHTML = [ '', '
', @@ -1199,7 +1199,7 @@ describe('Dropdown', () => { '' ].join('') @@ -1231,7 +1231,7 @@ describe('Dropdown', () => { '