我想从我通过 Mojolicious 抓取的页面的所有元素中删除 bgcolor 属性。
我的尝试如下:
$dom->all_contents->each(sub { $_->attr('bgcolor' => undef) });
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用。
我怎样做才正确?
以下用于Mojo::DOM删除bgcolor每个节点的属性:
use strict;
use warnings;
use Mojo::DOM;
my $dom = Mojo::DOM->new(do {local $/; <DATA>});
for my $node ($dom->find('*')->each) {
delete $node->{bgcolor};
}
print $dom;
__DATA__
<html>
<head>
<title>Hello background color</title>
</head>
<body bgcolor="white">
<h1>Hello world</h1>
<table>
<tr><td bgcolor="blue">blue</td></tr>
<tr><td bgcolor="green">green</td></tr>
</table>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
输出:
<html>
<head>
<title>Hello background color</title>
</head>
<body>
<h1>Hello world</h1>
<table>
<tr><td>blue</td></tr>
<tr><td>green</td></tr>
</table>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
可以使用CSS 选择器将返回的节点限制为仅包含特定属性的节点:
for my $node ($dom->find('[bgcolor]')->each) {
Run Code Online (Sandbox Code Playgroud)还可以让 Mojo 处理迭代,如下所示:
$dom->find('*')->each(sub {
delete $_->{bgcolor};
});
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
363 次 |
| 最近记录: |