Skip to content

Commit c738c4e

Browse files
feat: [#1551] Add support for using whitespace-separated list to getElementsByClassName
* fix: Allow getElementsByClassName to accept a whitespace-separated list * chore: [#1618] Improves performance for getElemenmtsByClassName space separated list --------- Co-authored-by: David Ortner <[email protected]>
1 parent 2df1cc4 commit c738c4e

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

packages/happy-dom/src/nodes/parent-node/ParentNodeUtility.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,10 @@ export default class ParentNodeUtility {
8585
): HTMLCollection<Element> {
8686
return new HTMLCollection(
8787
PropertySymbol.illegalConstructor,
88-
() => QuerySelector.querySelectorAll(parentNode, `.${className}`)[PropertySymbol.items]
88+
() =>
89+
QuerySelector.querySelectorAll(parentNode, `.${className.replace(/\s+/gm, '.')}`)[
90+
PropertySymbol.items
91+
]
8992
);
9093
}
9194

packages/happy-dom/test/nodes/parent-node/ParentNodeUtility.test.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,32 @@ describe('ParentNodeUtility', () => {
153153
expect(elementByClassName[1]).toBe(element2);
154154
expect(elementByClassName[2]).toBe(element3);
155155
});
156+
157+
it('Supports space-separated class names.', () => {
158+
const addedClassName = 'className otherClassName verySeparatedClassName';
159+
const queriedClassName = 'className otherClassName verySeparatedClassName';
160+
161+
const parent = document.createElement('div');
162+
const element1 = document.createElement('div');
163+
const element2 = document.createElement('div');
164+
const element3 = document.createElement('div');
165+
166+
element1.className = addedClassName;
167+
element2.className = addedClassName;
168+
element3.className = addedClassName;
169+
170+
parent.appendChild(element1);
171+
element1.appendChild(element2);
172+
element1.appendChild(element3);
173+
174+
const elementByClassName = ParentNodeUtility.getElementsByClassName(parent, queriedClassName);
175+
176+
expect(elementByClassName instanceof HTMLCollection).toBe(true);
177+
expect(elementByClassName.length).toBe(3);
178+
expect(elementByClassName[0]).toBe(element1);
179+
expect(elementByClassName[1]).toBe(element2);
180+
expect(elementByClassName[2]).toBe(element3);
181+
});
156182
});
157183

158184
describe('getElementsByTagName()', () => {

0 commit comments

Comments
 (0)