aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohann-S <[email protected]>2018-08-07 18:37:46 +0200
committerJohann-S <[email protected]>2018-08-07 18:49:02 +0200
commit6b92321f6a04f07e0a3531d0e546c3cc20867bdb (patch)
treee4abe9eca0f9718d066eb19dee499840292981fa
parentae53690ab4fbc044f69120f4d495137a79cdca32 (diff)
downloadbootstrap-6b92321f6a04f07e0a3531d0e546c3cc20867bdb.tar.xz
bootstrap-6b92321f6a04f07e0a3531d0e546c3cc20867bdb.zip
fix(util): use getElementById when it's possible
-rw-r--r--js/src/util.js12
-rw-r--r--js/tests/unit/util.js12
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'