From a54feafcb5bfac8684e691006b124e1a85f79c67 Mon Sep 17 00:00:00 2001 From: takaya1992 Date: Fri, 6 Jan 2023 01:40:28 +0900 Subject: [PATCH 1/2] #686@trivial: Add test no number before 'n'. --- .../test/query-selector/QuerySelector.test.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/packages/happy-dom/test/query-selector/QuerySelector.test.ts b/packages/happy-dom/test/query-selector/QuerySelector.test.ts index 3165317cf..b9be1b0d1 100644 --- a/packages/happy-dom/test/query-selector/QuerySelector.test.ts +++ b/packages/happy-dom/test/query-selector/QuerySelector.test.ts @@ -470,6 +470,16 @@ describe('QuerySelector', () => { expect(elements[1]).toBe(container.children[0].children[1].children[1]); }); + it('Returns all elements matching ":nth-child(n+8)".', () => { + const container = document.createElement('div'); + container.innerHTML = QuerySelectorNthChildHTML; + const elements = container.querySelectorAll(':nth-child(n+8)'); + + expect( + elements.map((element) => `${element.tagName.toLowerCase()}.${element.className}`) + ).toEqual(['span.n8', 'div.n9', 'i.n10']); + }); + it('Returns all elements matching :nth-child(2n).', () => { const container = document.createElement('div'); container.innerHTML = QuerySelectorNthChildHTML; From 43a501745819b5e0cc3fc1cfa2a934238c82a15e Mon Sep 17 00:00:00 2001 From: takaya1992 Date: Fri, 6 Jan 2023 01:42:18 +0900 Subject: [PATCH 2/2] #686@patch: Fixed infinite loop bug when there is no number before 'n'. --- packages/happy-dom/src/query-selector/SelectorItem.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/happy-dom/src/query-selector/SelectorItem.ts b/packages/happy-dom/src/query-selector/SelectorItem.ts index b24e4a970..bb1a968ad 100644 --- a/packages/happy-dom/src/query-selector/SelectorItem.ts +++ b/packages/happy-dom/src/query-selector/SelectorItem.ts @@ -170,7 +170,7 @@ export default class SelectorItem { } else if (place.includes('n')) { const [a, b] = place.replace(/ /g, '').split('n'); const childIndex = children.indexOf(element); - const aNumber = Number(a); + const aNumber = a !== '' ? Number(a) : 1; const bNumber = b !== undefined ? Number(b) : 0; if (isNaN(aNumber) || isNaN(bNumber)) { throw new DOMException(`The selector "${this.selector}" is not valid.`);