public function matches(Element $element) { if ($this->name && $this->name !== '*' && $element->getName() !== $this->name) { return false; } if ($this->id && (!$element->hasId() || $element->getId() !== $this->id)) { return false; } if (!empty($this->classes)) { foreach ($this->classes as $class) { if (!$element->hasClass($class)) { return false; } } } if (!empty($attributes)) { foreach ($attributes as $name => $value) { if (!$element->hasAttribute($name)) { return false; } if ($value !== null && $element->getAttribute($name) !== $value) { return false; } } } if (!empty($this->pseudos)) { foreach ($this->pseudos as $name => $value) { if (!array_key_exists($name, self::$registeredPseudos)) { throw new Exception("Failed to resolve selector: Pseudo {$name} doesnt exist"); } $idx = $element->getIndex(); if (!call_user_func(self::$registeredPseudos[$name], $value, $element, $idx)) { return false; } } } return true; }