}
}
+ function escapeId(selector) {
+ // we escape IDs in case of special selectors (selector = '#myId:something')
+ // $.escapeSelector does not exist in jQuery < 3
+ selector = typeof $.escapeSelector === 'function' ? $.escapeSelector(selector).substr(1) :
+ selector.replace(/(:|\.|\[|\]|,|=|@)/g, '\\$1')
+
+ return selector
+ }
/**
* --------------------------------------------------------------------------
selector = element.getAttribute('href') || ''
}
+ // if it's an ID
+ if (selector.charAt(0) === '#') {
+ selector = escapeId(selector)
+ }
+
try {
const $selector = $(document).find(selector)
return $selector.length > 0 ? selector : null
QUnit.module('util')
QUnit.test('Util.getSelectorFromElement should return the correct element', function (assert) {
- assert.expect(2)
+ assert.expect(5)
+
var $el = $('<div data-target="body"></div>').appendTo($('#qunit-fixture'))
assert.strictEqual(Util.getSelectorFromElement($el[0]), 'body')
// not found element
var $el2 = $('<div data-target="#fakeDiv"></div>').appendTo($('#qunit-fixture'))
assert.strictEqual(Util.getSelectorFromElement($el2[0]), null)
+
+ // should escape ID and find the correct element
+ var $el3 = $('<div data-target="#collapse:Example"></div>').appendTo($('#qunit-fixture'))
+ $('<div id="collapse:Example"></div>').appendTo($('#qunit-fixture'))
+ assert.strictEqual(Util.getSelectorFromElement($el3[0]), '#collapse\\:Example')
+
+ // if $.escapeSelector doesn't exist in older jQuery versions (< 3)
+ var tmpEscapeSelector = $.escapeSelector
+ delete $.escapeSelector
+ assert.ok(typeof $.escapeSelector === 'undefined', '$.escapeSelector undefined')
+ assert.strictEqual(Util.getSelectorFromElement($el3[0]), '#collapse\\:Example')
+ $.escapeSelector = tmpEscapeSelector
})
QUnit.test('Util.typeCheckConfig should thrown an error when a bad config is passed', function (assert) {