/** * @param Selector|string $selector * * @return static * @throws Exception */ public function filter($selector) { $selector = $selector instanceof Selector || is_callable($selector) ? $selector : Selector::fromString($selector); $filter = is_callable($selector) ? $selector : function (ElementInterface $el) use($selector) { return $el->matches($selector); }; return new static(array_filter($this->elements, $filter)); }
/** * @param Selector|string $selector * @param \Tale\Tree\Node|null $parent * @param array|null $children * * @return static * @throws \Exception */ public static function fromSelector($selector, Node $parent = null, array $children = null) { $selector = $selector instanceof Selector ? $selector : Selector::fromString($selector); $tag = $selector->getName(); $el = new static($tag ? $tag : 'div', $selector->getAttributes(), $parent, $children); if ($id = $selector->getId()) { $el->setId($id); } if ($classes = $selector->getClasses()) { foreach ($classes as $class) { $el->appendClass($class); } } return $el; }