A high-performance CSS selector parser with advanced features for modern web development.
css1
: W3C CSS1 Specificationcss2
: W3C CSS2 Specificationcss3
/selectors-3
: W3C Selectors Level 3selectors-4
: W3C Selectors Level 4latest
: refers to selectors-4
progressive
: latest
+ accepts unknown pseudo-classes, pseudo-elements and attribute case sensitivity modifiersSee Changelog for release details.
npm install css-selector-parser # or yarn add css-selector-parser # or pnpm add css-selector-parser
import { createParser } from 'css-selector-parser'; const parse = createParser(); const selector = parse('a[href^="/"], .container:has(nav) > a[href]:nth-child(2)::before'); console.log(selector);
This produces an AST (Abstract Syntax Tree) output:
({ type: 'Selector', rules: [ { type: 'Rule', items: [ { type: 'TagName', name: 'a' }, { type: 'Attribute', name: 'href', operator: '^=', value: { type: 'String', value: '/' } } ] }, { type: 'Rule', items: [ { type: 'ClassName', name: 'container' }, { type: 'PseudoClass', name: 'has', argument: { type: 'Selector', rules: [ { type: 'Rule', items: [ { type: 'TagName', name: 'nav' } ] } ] } } ], nestedRule: { type: 'Rule', items: [ { type: 'TagName', name: 'a' }, { type: 'Attribute', name: 'href' }, { type: 'PseudoClass', name: 'nth-child', argument: { type: 'Formula', a: 0, b: 2 } }, { type: 'PseudoElement', name: 'before' } ], combinator: '>' } } ] })Building and Rendering Selectors
import { ast, render } from 'css-selector-parser'; const selector = ast.selector({ rules: [ ast.rule({ items: [ ast.tagName({name: 'a'}), ast.attribute({name: 'href', operator: '^=', value: ast.string({value: '/'})}) ] }), ast.rule({ items: [ ast.className({name: 'container'}), ast.pseudoClass({ name: 'has', argument: ast.selector({ rules: [ast.rule({items: [ast.tagName({name: 'nav'})]})] }) }) ], nestedRule: ast.rule({ combinator: '>', items: [ ast.tagName({name: 'a'}), ast.attribute({name: 'href'}), ast.pseudoClass({ name: 'nth-child', argument: ast.formula({a: 0, b: 2}) }), ast.pseudoElement({name: 'before'}) ] }) }) ] }); console.log(render(selector)); // a[href^="/"], .container:has(nav) > a[href]:nth-child(2)::before
CSS Modules are specifications that add new selectors or modify existing ones. This parser supports various CSS modules that can be included in your syntax definition:
import { createParser } from 'css-selector-parser'; // Create a parser with specific CSS modules enabled const parse = createParser({ syntax: 'selectors-4', modules: ['css-position-3', 'css-scoping-1'] });Module Description
css-position-1/2/3/4
Position-related pseudo-classes css-scoping-1
Shadow DOM selectors (:host
, :host-context()
, ::slotted()
) css-pseudo-4
Modern pseudo-elements (::selection
, ::backdrop
, etc.) css-shadow-parts-1
::part()
for styling shadow DOM components
The latest
syntax automatically includes all modules marked as current specifications.
Contributions are welcome! Please feel free to submit a Pull Request.
MIT
To report a security vulnerability, please use the Tidelift security contact. Tidelift will coordinate the fix and disclosure.
If you find this project useful, please consider sponsoring the developer or supporting on Patreon.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4