From 19d540caee5ea6e858748ee91380ec30631d6559 Mon Sep 17 00:00:00 2001 From: David Ortner Date: Tue, 23 May 2023 00:54:45 +0200 Subject: [PATCH] #928@patch: Fixes problem with querySelectorAll() not always retirning elements in document order. --- .../src/query-selector/QuerySelector.ts | 2 +- .../test/query-selector/QuerySelector.test.ts | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/packages/happy-dom/src/query-selector/QuerySelector.ts b/packages/happy-dom/src/query-selector/QuerySelector.ts index 59223b056..2b20cef72 100644 --- a/packages/happy-dom/src/query-selector/QuerySelector.ts +++ b/packages/happy-dom/src/query-selector/QuerySelector.ts @@ -221,7 +221,7 @@ export default class QuerySelector { for (let i = 0, max = children.length; i < max; i++) { const child = children[i]; - const position = (documentPosition ? documentPosition + '>' : '') + i; + const position = (documentPosition ? documentPosition + '>' : '') + String.fromCharCode(i); if (selectorItem.match(child)) { if (!nextSelectorItem) { diff --git a/packages/happy-dom/test/query-selector/QuerySelector.test.ts b/packages/happy-dom/test/query-selector/QuerySelector.test.ts index 9704bf801..d9d2314d5 100644 --- a/packages/happy-dom/test/query-selector/QuerySelector.test.ts +++ b/packages/happy-dom/test/query-selector/QuerySelector.test.ts @@ -128,6 +128,29 @@ describe('QuerySelector', () => { 'ccb', 'ccc' ]); + + element.innerHTML = ` +
0
+ +
2
+
3
+
4
+
5
+
6
+
7
+ + + + + `; + + expect(Array.from(element.querySelectorAll('button')).map((div) => div.textContent)).toEqual([ + '1', + '8', + '9', + '10', + '11' + ]); }); it('Returns a NodeList with the method item().', () => {