From 3f545e870e8d96aedb0f9be4e1c5c6b9f5ea4a0f Mon Sep 17 00:00:00 2001 From: David Ortner Date: Thu, 9 Jan 2025 00:32:16 +0100 Subject: [PATCH] chore: [#1678] Fixes problem with query selector --- .../happy-dom/src/query-selector/SelectorItem.ts | 4 +++- .../happy-dom/test/html-parser/HTMLParser.test.ts | 4 ++++ .../test/query-selector/QuerySelector.test.ts | 14 ++++++++++++-- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/packages/happy-dom/src/query-selector/SelectorItem.ts b/packages/happy-dom/src/query-selector/SelectorItem.ts index d27063ff8..0bf5b4c5a 100644 --- a/packages/happy-dom/src/query-selector/SelectorItem.ts +++ b/packages/happy-dom/src/query-selector/SelectorItem.ts @@ -7,6 +7,8 @@ import ISelectorAttribute from './ISelectorAttribute.js'; import ISelectorMatch from './ISelectorMatch.js'; import ISelectorPseudo from './ISelectorPseudo.js'; +const SPACE_REGEXP = /\s+/; + /** * Selector item. */ @@ -417,7 +419,7 @@ export default class SelectorItem { return null; } - const classList = element.className.split(' '); + const classList = element.className.split(SPACE_REGEXP); let priorityWeight = 0; for (const className of this.classNames) { diff --git a/packages/happy-dom/test/html-parser/HTMLParser.test.ts b/packages/happy-dom/test/html-parser/HTMLParser.test.ts index b099649b2..a260b1975 100644 --- a/packages/happy-dom/test/html-parser/HTMLParser.test.ts +++ b/packages/happy-dom/test/html-parser/HTMLParser.test.ts @@ -2137,6 +2137,10 @@ describe('HTMLParser', () => { visually-hidden" type="button">{{message_gui_replies}} ` ); + + const element = result.querySelector('div > .comment_collapse'); + + expect(element).toBe(result.children[0].children[1]); }); }); }); diff --git a/packages/happy-dom/test/query-selector/QuerySelector.test.ts b/packages/happy-dom/test/query-selector/QuerySelector.test.ts index a72324b56..7e4f9ea8b 100644 --- a/packages/happy-dom/test/query-selector/QuerySelector.test.ts +++ b/packages/happy-dom/test/query-selector/QuerySelector.test.ts @@ -18,7 +18,7 @@ describe('QuerySelector', () => { document = window.document; }); - describe('querySelectorAll', () => { + describe('querySelectorAll()', () => { it('Throws an error for invalid selectors.', () => { const container = document.createElement('div'); expect(() => container.querySelectorAll((12))).toThrow( @@ -1214,7 +1214,7 @@ describe('QuerySelector', () => { }); }); - describe('querySelector', () => { + describe('querySelector()', () => { it('Throws an error for invalid selectors.', () => { const container = document.createElement('div'); expect(() => container.querySelector((12))).toThrow( @@ -1628,6 +1628,16 @@ describe('QuerySelector', () => { expect(document.querySelector(':focus')).toBe(div); expect(document.querySelector(':focus-visible')).toBe(div); }); + + it('Handles class names with line breaks', () => { + const div = document.createElement('div'); + div.innerHTML = ` +
+ `; + + expect(div.querySelector('.class1.class2')).toBe(div.children[0]); + }); }); describe('matches()', () => {