diff --git a/packages/happy-dom/src/nodes/parent-node/ParentNodeUtility.ts b/packages/happy-dom/src/nodes/parent-node/ParentNodeUtility.ts index 75dc2e51..6f5b218f 100644 --- a/packages/happy-dom/src/nodes/parent-node/ParentNodeUtility.ts +++ b/packages/happy-dom/src/nodes/parent-node/ParentNodeUtility.ts @@ -83,9 +83,14 @@ export default class ParentNodeUtility { parentNode: Element | DocumentFragment | Document, className: string ): HTMLCollection { + const classNames = className + // classNames can be whitespace separated, as many spaces as you want + .split(/\s+/) + .map((className) => `.${className}`) + .join(''); return new HTMLCollection( PropertySymbol.illegalConstructor, - () => QuerySelector.querySelectorAll(parentNode, `.${className}`)[PropertySymbol.items] + () => QuerySelector.querySelectorAll(parentNode, classNames)[PropertySymbol.items] ); } diff --git a/packages/happy-dom/test/nodes/parent-node/ParentNodeUtility.test.ts b/packages/happy-dom/test/nodes/parent-node/ParentNodeUtility.test.ts index 45bb92fe..b5f813a4 100644 --- a/packages/happy-dom/test/nodes/parent-node/ParentNodeUtility.test.ts +++ b/packages/happy-dom/test/nodes/parent-node/ParentNodeUtility.test.ts @@ -153,6 +153,32 @@ describe('ParentNodeUtility', () => { expect(elementByClassName[1]).toBe(element2); expect(elementByClassName[2]).toBe(element3); }); + + it('Supports space-separated class names.', () => { + const addedClassName = 'className otherClassName verySeparatedClassName'; + const queriedClassName = 'className otherClassName verySeparatedClassName'; + + const parent = document.createElement('div'); + const element1 = document.createElement('div'); + const element2 = document.createElement('div'); + const element3 = document.createElement('div'); + + element1.className = addedClassName; + element2.className = addedClassName; + element3.className = addedClassName; + + parent.appendChild(element1); + element1.appendChild(element2); + element1.appendChild(element3); + + const elementByClassName = ParentNodeUtility.getElementsByClassName(parent, queriedClassName); + + expect(elementByClassName instanceof HTMLCollection).toBe(true); + expect(elementByClassName.length).toBe(3); + expect(elementByClassName[0]).toBe(element1); + expect(elementByClassName[1]).toBe(element2); + expect(elementByClassName[2]).toBe(element3); + }); }); describe('getElementsByTagName()', () => {