File tree Expand file tree Collapse file tree 2 files changed +15
-5
lines changed Expand file tree Collapse file tree 2 files changed +15
-5
lines changed Original file line number Diff line number Diff line change @@ -181,7 +181,7 @@ export default class DOMTokenList {
181
181
* @param newToken NewToken.
182
182
*/
183
183
public replace ( token : string , newToken : string ) : boolean {
184
- const list = this [ PropertySymbol . getTokenList ] ( ) ;
184
+ const list = this [ PropertySymbol . getTokenList ] ( ) . slice ( ) ;
185
185
const index = list . indexOf ( token ) ;
186
186
if ( index === - 1 ) {
187
187
return false ;
@@ -241,14 +241,12 @@ export default class DOMTokenList {
241
241
* @param tokens Tokens.
242
242
*/
243
243
public add ( ...tokens : string [ ] ) : void {
244
- const list = this [ PropertySymbol . getTokenList ] ( ) ;
244
+ const list = this [ PropertySymbol . getTokenList ] ( ) . slice ( ) ;
245
245
246
246
for ( const token of tokens ) {
247
247
const index = list . indexOf ( token ) ;
248
248
if ( index === - 1 ) {
249
249
list . push ( token ) ;
250
- } else {
251
- list [ index ] = token ;
252
250
}
253
251
}
254
252
@@ -264,7 +262,7 @@ export default class DOMTokenList {
264
262
* @param tokens Tokens.
265
263
*/
266
264
public remove ( ...tokens : string [ ] ) : void {
267
- const list = this [ PropertySymbol . getTokenList ] ( ) ;
265
+ const list = this [ PropertySymbol . getTokenList ] ( ) . slice ( ) ;
268
266
269
267
for ( const token of tokens ) {
270
268
const index = list . indexOf ( token ) ;
Original file line number Diff line number Diff line change @@ -211,6 +211,18 @@ describe('Element', () => {
211
211
expect ( element . classList [ 0 ] ) . toBe ( 'value1' ) ;
212
212
expect ( element . classList [ 1 ] ) . toBe ( 'value2' ) ;
213
213
} ) ;
214
+
215
+ it ( 'Handles cache correctly (#1812)' , ( ) => {
216
+ element . classList . add ( 'foo' , 'bar' , 'baz' ) ;
217
+ expect ( element . outerHTML ) . toEqual ( '<div class="foo bar baz"></div>' ) ;
218
+ element . className = '' ;
219
+ element . classList . add ( 'bar' , 'baz' ) ;
220
+ expect ( element . outerHTML ) . toEqual ( '<div class="bar baz"></div>' ) ;
221
+ element . classList . remove ( 'baz' ) ;
222
+ expect ( element . outerHTML ) . toEqual ( '<div class="bar"></div>' ) ;
223
+ element . classList . replace ( 'bar' , 'foo' ) ;
224
+ expect ( element . outerHTML ) . toEqual ( '<div class="foo"></div>' ) ;
225
+ } ) ;
214
226
} ) ;
215
227
216
228
describe ( 'set classList()' , ( ) => {
You can’t perform that action at this time.
0 commit comments