Mojo::DOM:"matches" 是如何运作的?
Mojo::DOM: how does "matches" work?
我需要在下面的示例中更改什么,以便 matches( 'a[rel="next"]' )
returns true
?
#!/usr/bin/env perl
use warnings;
use strict;
use Mojo::DOM;
my $content = '<html><body><div><a hello="world" rel="next">Next</a></div></body></html>';
my $bool_1 = $content =~ /<a.+?rel="next"/;
print "1 OK\n" if $bool_1;
my $dom = Mojo::DOM->new( $content );
my $bool_2 = $dom->matches( 'a[rel="next"]' );
print "2 OK\n" if $bool_2; # does not print "2 OK"
Mojo::DOM->new( $content )
的结果是由标记表示的整个 DOM。起始元素始终是顶级元素;在本例中,它是 html
。自然地,html
不匹配选择器 a[rel="next"]
,因此 matches()
returns false.
在测试之前,您需要使用 at()
导航到 a
元素:
my $dom = Mojo::DOM->new( $content );
my $a = $dom->at( 'a' );
my $bool_2;
if ( defined $a ) {
$bool_2= $a->matches( 'a[rel="next"]' );
}
print "2 OK\n" if $bool_2;
我需要在下面的示例中更改什么,以便 matches( 'a[rel="next"]' )
returns true
?
#!/usr/bin/env perl
use warnings;
use strict;
use Mojo::DOM;
my $content = '<html><body><div><a hello="world" rel="next">Next</a></div></body></html>';
my $bool_1 = $content =~ /<a.+?rel="next"/;
print "1 OK\n" if $bool_1;
my $dom = Mojo::DOM->new( $content );
my $bool_2 = $dom->matches( 'a[rel="next"]' );
print "2 OK\n" if $bool_2; # does not print "2 OK"
Mojo::DOM->new( $content )
的结果是由标记表示的整个 DOM。起始元素始终是顶级元素;在本例中,它是 html
。自然地,html
不匹配选择器 a[rel="next"]
,因此 matches()
returns false.
在测试之前,您需要使用 at()
导航到 a
元素:
my $dom = Mojo::DOM->new( $content );
my $a = $dom->at( 'a' );
my $bool_2;
if ( defined $a ) {
$bool_2= $a->matches( 'a[rel="next"]' );
}
print "2 OK\n" if $bool_2;