- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/lib/web/dom/queryselectorengine.php
- Класс: BitrixMainWebDOMQuerySelectorEngine
- Вызов: QuerySelectorEngine::parseQueryString
public function parseQueryString($string)
{
static $dividers = array('*', '#', '.', ' ', '>', '<', '[', ':');
$path = array();
$string = trim($string);
$length = mb_strlen($string);
$i = 0;
while($i < $length)
{
$operator = '';
$char = mb_substr($string, $i, 1);
switch($char)
{
case '#':
$operator = self::PATH_CODE_ATTR;
$buffer = $this->writeToBuffer($string, $length, $i, $dividers);
$path[] = array(
'code' => $operator,
'value' => array(
'name' => 'id',
'operation' => '=',
'value' => $buffer
)
);
break;
case '.':
$operator = self::PATH_CODE_CLASS;
$buffer = $this->writeToBuffer($string, $length, $i, $dividers);
$path[] = array('code' => $operator, 'value' => $buffer);
break;
case ' ':
$operator = self::PATH_CODE_DESCENDANT;
$path[] = array('code' => $operator, 'value' => '');
++$i;
break;
case '>':
$operator = self::PATH_CODE_CHILD;
$path[] = array('code' => $operator, 'value' => '');
++$i;
break;
case '<':
$path[] = array('code' => $operator, 'value' => '');
++$i;
break;
case ':':
$operator = self::PATH_CODE_PSEUDO;
$buffer = $this->writeToBuffer($string, $length, $i, $dividers);
$path[] = array('code' => $operator, 'value' => $this->parseQueryStringPseudo($buffer));
break;
case '[':
$operator = self::PATH_CODE_ATTR;
$buffer = $this->writeToBuffer($string, $length, $i, [']']);
$path[] = array('code' => $operator, 'value' => $this->parseQueryStringAttr($buffer));
++$i;
break;
default:
//throw new DomException('Wrong QuerySelector string');
$operator = self::PATH_CODE_NAME;
$buffer = $char;
$buffer .= $this->writeToBuffer($string, $length, $i, $dividers);
$path[] = array('code' => $operator, 'value' => $buffer);
}
}
return $path;
}