diff --git a/src/pseudo-selectors/filters.ts b/src/pseudo-selectors/filters.ts index 83f0a69d..fbe726c8 100644 --- a/src/pseudo-selectors/filters.ts +++ b/src/pseudo-selectors/filters.ts @@ -156,7 +156,7 @@ export const filters: Record = { return (element) => equals(context[0], element) && next(element); } - return (element) => context.includes(element) && next(element); + return (element) => context.some((node) => equals(node, element)) && next(element); }, lang(next, code, { adapter }) { diff --git a/test/api.ts b/test/api.ts index 97884377..c7d66fcc 100644 --- a/test/api.ts +++ b/test/api.ts @@ -381,6 +381,30 @@ describe("API", () => { ).toStrictEqual(p); }); + it("should use adapter equals for multiple context elements", () => { + const [a, b] = parseDocument('
') + .children as Element[]; + const [contextA, contextB] = parseDocument( + '
', + ).children as Element[]; + + const adapter: Adapter = { + ...DomUtils, + isTag, + equals: (left, right) => + isTag(left) && + isTag(right) && + left.attribs["id"] === right.attribs["id"], + }; + + expect( + CSSselect.selectAll(":scope", [a, b], { + adapter, + context: [contextA, contextB], + }), + ).toStrictEqual([a, b]); + }); + it("should not crash when siblings repeat", () => { const dom = parseDocument("
".repeat(51)) .children as Element[];