zxqfox/css-selector-parser

简单的CSS选择器解析器。https://github.com/mdevils/node-css-selector-parser 的 PHP 版本

0.0.5 2014-10-27 13:57 UTC

This package is not auto-updated.

Last update: 2024-09-24 03:38:55 UTC


README

快速且内存消耗低的CSS选择器解析器。

将CSS选择器解析成对象模型。

安装

composer require zxqfox/css-selector-parser

使用

use CSSSelectorParser\Parser;

$parser = new Parser();

$parser->registerSelectorPseudos('has');
$parser->registerNestingOperators('>', '+', '~');
$parser->registerAttrEqualityMods('^', '$', '*', '~');
$parser->enableSubstitutes();

$css = 'a[href^=/], .container:has(nav) > a[href]:lt($var)';
echo json_encode($parser->parse($css), JSON_PRETTY_PRINT);

生成

{ type: 'selectors',
  selectors:
   [ { type: 'ruleSet',
       rule:
        { tagName: 'a',
          attrs: [ { name: 'href', operator: '^=', valueType: 'string', value: '/' } ],
          type: 'rule' } },
     { type: 'ruleSet',
       rule:
        { classNames: [ 'container' ],
          pseudos:
           [ { name: 'has',
               valueType: 'selector',
               value: { type: 'ruleSet', rule: { tagName: 'nav', type: 'rule' } } } ],
          type: 'rule',
          rule:
           { tagName: 'a',
             attrs: [ { name: 'href' } ],
             pseudos: [ { name: 'lt', valueType: 'substitute', value: 'var' } ],
             nestingOperator: '>',
             type: 'rule' } } } ] }

令牌描述

类型可能是以下之一

  • 选择器 — 选择器列表,令牌包含 选择器 数组,包含 ruleSet 令牌(基于 "," 操作符)。
  • ruleSet — 选择器,令牌包含 rule 字段,包含 rule-type 对象。
  • rule — 单个规则。

rule 类型字段

  • tagName — 规则的标签名(例如 "div"),可能是 '*'。
  • classNames — 规则的CSS类名列表。
  • attrs — 属性规则列表;规则可能包含字段
    • name — 属性名,必填字段。
    • valueType — 比较值的类型 ("string" 或 "substitute")。
    • operator — 属性值比较运算符。
    • value — 比较属性值。
  • pseudos — 伪类规则列表;规则可能包含字段
    • name — 伪类名,必填字段。
    • valueType — 参数类型 ("string", "selector" 或 "substitute")。
    • value — 伪类参数。
  • nestingOperator — 用于嵌套此规则的运算符(例如,在选择器 "tag1 > tag2" 中,tag2 将具有 nestingOperator=">")
  • rule — 嵌套规则。

许可

MIT