Commit 79d6b57 1 parent 26dc17b commit 79d6b57 Copy full SHA for 79d6b57
File tree 2 files changed +27
-1
lines changed
2 files changed +27
-1
lines changed Original file line number Diff line number Diff line change @@ -87,6 +87,14 @@ const Util = (($) => {
87
87
}
88
88
}
89
89
90
+ function escapeId ( selector ) {
91
+ // we escape IDs in case of special selectors (selector = '#myId:something')
92
+ // $.escapeSelector does not exist in jQuery < 3
93
+ selector = typeof $ . escapeSelector === 'function' ? $ . escapeSelector ( selector ) . substr ( 1 ) :
94
+ selector . replace ( / ( : | \. | \[ | \] | , | = | @ ) / g, '\\$1' )
95
+
96
+ return selector
97
+ }
90
98
91
99
/**
92
100
* --------------------------------------------------------------------------
@@ -112,6 +120,11 @@ const Util = (($) => {
112
120
selector = element . getAttribute ( 'href' ) || ''
113
121
}
114
122
123
+ // if it's an ID
124
+ if ( selector . charAt ( 0 ) === '#' ) {
125
+ selector = escapeId ( selector )
126
+ }
127
+
115
128
try {
116
129
const $selector = $ ( document ) . find ( selector )
117
130
return $selector . length > 0 ? selector : null
Original file line number Diff line number Diff line change @@ -4,13 +4,26 @@ $(function () {
4
4
QUnit . module ( 'util' )
5
5
6
6
QUnit . test ( 'Util.getSelectorFromElement should return the correct element' , function ( assert ) {
7
- assert . expect ( 2 )
7
+ assert . expect ( 5 )
8
+
8
9
var $el = $ ( '<div data-target="body"></div>' ) . appendTo ( $ ( '#qunit-fixture' ) )
9
10
assert . strictEqual ( Util . getSelectorFromElement ( $el [ 0 ] ) , 'body' )
10
11
11
12
// not found element
12
13
var $el2 = $ ( '<div data-target="#fakeDiv"></div>' ) . appendTo ( $ ( '#qunit-fixture' ) )
13
14
assert . strictEqual ( Util . getSelectorFromElement ( $el2 [ 0 ] ) , null )
15
+
16
+ // should escape ID and find the correct element
17
+ var $el3 = $ ( '<div data-target="#collapse:Example"></div>' ) . appendTo ( $ ( '#qunit-fixture' ) )
18
+ $ ( '<div id="collapse:Example"></div>' ) . appendTo ( $ ( '#qunit-fixture' ) )
19
+ assert . strictEqual ( Util . getSelectorFromElement ( $el3 [ 0 ] ) , '#collapse\\:Example' )
20
+
21
+ // if $.escapeSelector doesn't exist in older jQuery versions (< 3)
22
+ var tmpEscapeSelector = $ . escapeSelector
23
+ delete $ . escapeSelector
24
+ assert . ok ( typeof $ . escapeSelector === 'undefined' , '$.escapeSelector undefined' )
25
+ assert . strictEqual ( Util . getSelectorFromElement ( $el3 [ 0 ] ) , '#collapse\\:Example' )
26
+ $ . escapeSelector = tmpEscapeSelector
14
27
} )
15
28
16
29
QUnit . test ( 'Util.typeCheckConfig should thrown an error when a bad config is passed' , function ( assert ) {
You can’t perform that action at this time.
0 commit comments