Skip to content

Commit 86a6e41

Browse files
authored
Merge pull request #12 from bkonetzny/master
Allow dashes in tagname selector
2 parents efeeba4 + 8b2b396 commit 86a6e41

File tree

2 files changed

+17
-9
lines changed

2 files changed

+17
-9
lines changed

src/HTML5DOMDocument/Internal/QuerySelectors.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ private function internalQuerySelectorAll(string $selector, $preferredLimit = nu
7878
}
7979
});
8080
return new \IvoPetkov\HTML5DOMNodeList($result);
81-
} elseif (preg_match('/^[a-z0-9]+$/', $selector) === 1) { // tagname
81+
} elseif (preg_match('/^[a-z0-9\-]+$/', $selector) === 1) { // tagname
8282
$result = [];
8383
$walkChildren($this, $selector, function($element) use (&$result, $preferredLimit) {
8484
$result[] = $element;
@@ -87,7 +87,7 @@ private function internalQuerySelectorAll(string $selector, $preferredLimit = nu
8787
}
8888
});
8989
return new \IvoPetkov\HTML5DOMNodeList($result);
90-
} elseif (preg_match('/^([a-z0-9]*)\[(.+)\=\"(.+)\"\]$/', $selector, $matches) === 1) { // tagname[attribute="value"] or [attribute="value"]
90+
} elseif (preg_match('/^([a-z0-9\-]*)\[(.+)\=\"(.+)\"\]$/', $selector, $matches) === 1) { // tagname[attribute="value"] or [attribute="value"]
9191
$result = [];
9292
$tagName = strlen($matches[1]) > 0 ? $matches[1] : null;
9393
$walkChildren($this, $tagName, function($element) use (&$result, $preferredLimit, $matches) {
@@ -99,7 +99,7 @@ private function internalQuerySelectorAll(string $selector, $preferredLimit = nu
9999
}
100100
});
101101
return new \IvoPetkov\HTML5DOMNodeList($result);
102-
} elseif (preg_match('/^([a-z0-9]*)\[(.+)\]$/', $selector, $matches) === 1) { // tagname[attribute] or [attribute]
102+
} elseif (preg_match('/^([a-z0-9\-]*)\[(.+)\]$/', $selector, $matches) === 1) { // tagname[attribute] or [attribute]
103103
$result = [];
104104
$tagName = strlen($matches[1]) > 0 ? $matches[1] : null;
105105
$walkChildren($this, $tagName, function($element) use (&$result, $preferredLimit, $matches) {
@@ -111,15 +111,15 @@ private function internalQuerySelectorAll(string $selector, $preferredLimit = nu
111111
}
112112
});
113113
return new \IvoPetkov\HTML5DOMNodeList($result);
114-
} elseif (preg_match('/^([a-z0-9]*)#(.+)$/', $selector, $matches) === 1) { // tagname#id or #id
114+
} elseif (preg_match('/^([a-z0-9\-]*)#(.+)$/', $selector, $matches) === 1) { // tagname#id or #id
115115
$tagName = strlen($matches[1]) > 0 ? $matches[1] : null;
116116
$idSelector = $matches[2];
117117
$element = $getElementById($idSelector, $tagName);
118118
if ($element) {
119119
return new \IvoPetkov\HTML5DOMNodeList([$element]);
120120
}
121121
return new \IvoPetkov\HTML5DOMNodeList();
122-
} elseif (preg_match('/^([a-z0-9]*)\.(.+)$/', $selector, $matches) === 1) { // tagname.classname or .classname
122+
} elseif (preg_match('/^([a-z0-9\-]*)\.(.+)$/', $selector, $matches) === 1) { // tagname.classname or .classname
123123
$tagName = strlen($matches[1]) > 0 ? $matches[1] : null;
124124
$classSelector = $matches[2];
125125
$result = [];

tests/Test.php

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -344,12 +344,13 @@ public function testQuerySelector()
344344
. '<div>'
345345
. '<div class="text3 class1">text3</div>'
346346
. '</div>'
347+
. '<my-custom-element class="text5 class1">text5</my-custom-element>'
347348
. '<span id="text4" class="class1 class2">text4</div>'
348349
. '</body></html>');
349350

350351
$this->assertTrue($dom->querySelector('#text1')->innerHTML === 'text1');
351352

352-
$this->assertTrue($dom->querySelectorAll('*')->length === 8); // html + body + 1 h1 + 4 divs + 1 span
353+
$this->assertTrue($dom->querySelectorAll('*')->length === 9); // html + body + 1 h1 + 4 divs + 1 custom element + 1 span
353354
$this->assertTrue($dom->querySelectorAll('h1')->item(0)->innerHTML === 'text0');
354355
$this->assertTrue($dom->querySelectorAll('div')->length === 4); // 4 divs
355356
$this->assertTrue($dom->querySelectorAll('#text1')->length === 1);
@@ -366,9 +367,12 @@ public function testQuerySelector()
366367
$this->assertTrue($dom->querySelectorAll('span[data-other]')->length === 0);
367368
$this->assertTrue($dom->querySelectorAll('div#text4')->length === 0);
368369
$this->assertTrue($dom->querySelectorAll('div.class1')->length === 2);
369-
$this->assertTrue($dom->querySelectorAll('.class1')->length === 3);
370+
$this->assertTrue($dom->querySelectorAll('.class1')->length === 4);
370371
$this->assertTrue($dom->querySelectorAll('div.class2')->length === 0);
371372
$this->assertTrue($dom->querySelectorAll('span.class2')->length === 1);
373+
$this->assertTrue($dom->querySelectorAll('my-custom-element')->length === 1);
374+
$this->assertTrue($dom->querySelectorAll('my-custom-element.text5')->length === 1);
375+
$this->assertTrue($dom->querySelectorAll('my-custom-element.text5')->item(0)->innerHTML === 'text5');
372376

373377
$this->assertTrue($dom->querySelectorAll('unknown')->length === 0);
374378
$this->assertTrue($dom->querySelectorAll('unknown')->item(0) === null);
@@ -391,12 +395,13 @@ public function testElementQuerySelector()
391395
. '<div>'
392396
. '<div class="text3 class1">text3</div>'
393397
. '</div>'
398+
. '<my-custom-element class="text5 class1">text5</my-custom-element>'
394399
. '<span id="text4" class="class1 class2">text4</div>'
395400
. '</div></body></html>');
396401

397402
$this->assertTrue($dom->querySelector('#container')->querySelector('#text1')->innerHTML === 'text1');
398403

399-
$this->assertTrue($dom->querySelector('#container')->querySelectorAll('*')->length === 5); // 4 divs + 1 span
404+
$this->assertTrue($dom->querySelector('#container')->querySelectorAll('*')->length === 6); // 4 divs + 1 custom element + 1 span
400405
$this->assertTrue($dom->querySelector('#container')->querySelectorAll('div')->length === 4); // 4 divs
401406
$this->assertTrue($dom->querySelector('#container')->querySelectorAll('#text1')->length === 1);
402407
$this->assertTrue($dom->querySelector('#container')->querySelectorAll('#text1')->item(0)->innerHTML === 'text1');
@@ -408,9 +413,12 @@ public function testElementQuerySelector()
408413
$this->assertTrue($dom->querySelector('#container')->querySelectorAll('span[id="text4"]')->item(0)->innerHTML === 'text4');
409414
$this->assertTrue($dom->querySelector('#container')->querySelectorAll('div#text4')->length === 0);
410415
$this->assertTrue($dom->querySelector('#container')->querySelectorAll('div.class1')->length === 2);
411-
$this->assertTrue($dom->querySelector('#container')->querySelectorAll('.class1')->length === 3);
416+
$this->assertTrue($dom->querySelector('#container')->querySelectorAll('.class1')->length === 4);
412417
$this->assertTrue($dom->querySelector('#container')->querySelectorAll('div.class2')->length === 0);
413418
$this->assertTrue($dom->querySelector('#container')->querySelectorAll('span.class2')->length === 1);
419+
$this->assertTrue($dom->querySelector('#container')->querySelectorAll('my-custom-element')->length === 1);
420+
$this->assertTrue($dom->querySelector('#container')->querySelectorAll('my-custom-element.text5')->length === 1);
421+
$this->assertTrue($dom->querySelector('#container')->querySelectorAll('my-custom-element.text5')->item(0)->innerHTML === 'text5');
414422

415423
$this->assertTrue($dom->querySelector('#container')->querySelectorAll('unknown')->length === 0);
416424
$this->assertTrue($dom->querySelector('#container')->querySelectorAll('unknown')->item(0) === null);

0 commit comments

Comments
 (0)