diff options
| author | Johann-S <[email protected]> | 2018-08-07 18:37:46 +0200 |
|---|---|---|
| committer | Johann-S <[email protected]> | 2018-08-07 18:49:02 +0200 |
| commit | 6b92321f6a04f07e0a3531d0e546c3cc20867bdb (patch) | |
| tree | e4abe9eca0f9718d066eb19dee499840292981fa | |
| parent | ae53690ab4fbc044f69120f4d495137a79cdca32 (diff) | |
| download | bootstrap-6b92321f6a04f07e0a3531d0e546c3cc20867bdb.tar.xz bootstrap-6b92321f6a04f07e0a3531d0e546c3cc20867bdb.zip | |
fix(util): use getElementById when it's possible
| -rw-r--r-- | js/src/util.js | 12 | ||||
| -rw-r--r-- | js/tests/unit/util.js | 12 |
2 files changed, 22 insertions, 2 deletions
diff --git a/js/src/util.js b/js/src/util.js index eb98d449c..3008c2278 100644 --- a/js/src/util.js +++ b/js/src/util.js @@ -77,12 +77,20 @@ const Util = (($) => { getSelectorFromElement(element) { let selector = element.getAttribute('data-target') + let method = 'querySelector' + if (!selector || selector === '#') { - selector = element.getAttribute('href') || '' + selector = (element.getAttribute('href') || '').trim() + } + + const validSelector = selector + if (selector.charAt(0) === '#') { + selector = selector.substr(1) + method = 'getElementById' } try { - return document.querySelector(selector) ? selector : null + return document[method](selector) ? validSelector : null } catch (err) { return null } diff --git a/js/tests/unit/util.js b/js/tests/unit/util.js index 37327b868..49252701a 100644 --- a/js/tests/unit/util.js +++ b/js/tests/unit/util.js @@ -20,6 +20,18 @@ $(function () { assert.strictEqual(Util.getSelectorFromElement($el2[0]), null) }) + QUnit.test('Util.getSelectorFromElement should use getElementById', function (assert) { + assert.expect(2) + + var spy = sinon.spy(document, 'getElementById') + + var $el = $('<div data-target="#7"></div>').appendTo($('#qunit-fixture')) + $('<div id="7" />').appendTo($('#qunit-fixture')) + + assert.strictEqual(Util.getSelectorFromElement($el[0]), '#7') + assert.ok(spy.called) + }) + QUnit.test('Util.typeCheckConfig should thrown an error when a bad config is passed', function (assert) { assert.expect(1) var namePlugin = 'collapse' |
