Mojo :: DOM:"如何匹配"工作?

时间:2015-04-18 06:04:20

标签: html perl css-selectors mojolicious

我需要在下面的示例中更改哪些内容,以便matches( 'a[rel="next"]' )返回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"

1 个答案:

答案 0 :(得分:1)

Mojo::DOM->new( $content )的结果是由标记表示的整个DOM。起始元素始终是顶级元素;在这种情况下,它是html。当然,html与选择器a[rel="next"]不匹配,因此matches()返回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;