Skip to content

Commit 248c2a8

Browse files
committed
Fixed bug in selector::parse() where when it hit a bracketclose it didn't exit the loop, causing it to parse too much.
Improved `tag::find()` by making it do work out of a loop. Added test to findHtmldocTest.php to check it can find items where `:not(:pseudo-selector)`.
1 parent a5a94ad commit 248c2a8

File tree

3 files changed

+4
-2
lines changed

3 files changed

+4
-2
lines changed

src/helpers/selector.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ public function parse(tokenise $tokens) {
109109
case 'bracketclose':
110110
$selectors[] = $parts;
111111
$parts = [];
112-
break;
112+
break 2;
113113
}
114114
} while (($token = $tokens->next()) !== null);
115115
if ($parts) {

src/tokens/tag.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -644,9 +644,10 @@ public function find(array $selector, bool $searchChildren = true) : array {
644644
// pass rest of selector to level below
645645
if ($item['join'] && $i) {
646646
$match = false;
647+
$childselector = \array_slice($selector, $i);
647648
foreach ($this->children AS $child) {
648649
if (\get_class($child) === 'hexydec\\html\\tag') {
649-
$found = \array_merge($found, $child->find(\array_slice($selector, $i)));
650+
$found = \array_merge($found, $child->find($childselector));
650651
}
651652
}
652653
break;

tests/findHtmldocTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ public function testCanFindElements() {
4242
'.find > .find__paragraph' => '<p class="find__paragraph" title="This is a paragraph">Paragraph</p>',
4343
'title:not([class])' => '<title>Find</title>',
4444
'.positions div:not(.find)' => '<div id="first" class="first">First</div><div class="last">Last</div>',
45+
'body section:not(:first-child) div:last-child' => '<div data-word="one two three four">attr</div>',
4546
'[data-attr]' => '<div data-attr>attr</div><div data-attr="">attr</div><div data-attr="attr">attr</div><div data-attr="attr-value1">attr</div><div data-attr="attr-value2">attr</div>',
4647
'[data-attr|=attr]' => '<div data-attr="attr">attr</div><div data-attr="attr-value1">attr</div><div data-attr="attr-value2">attr</div>',
4748
'[data-word~=three]' => '<div data-word="one two three four">attr</div>'

0 commit comments

Comments
 (0)