我想从我通过Mojolicious抓取的页面的所有元素中删除bgcolor属性。
我的尝试如下:
$dom->all_contents->each(sub { $_->attr('bgcolor' => undef) });
但这似乎不起作用。
我该怎么做?
答案 0 :(得分:4)
以下使用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>
输出:
<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>
可以使用CSS Selectors将返回的节点限制为仅包含特定属性的节点:
for my $node ($dom->find('[bgcolor]')->each) {
还可以让Mojo处理迭代,如下所示:
$dom->find('*')->each(sub {
delete $_->{bgcolor};
});
答案 1 :(得分:0)
据我了解,您正在寻找的DOM属性不是bgcolor
而是background-color
,即css品种。 bgcolor
暂时不受欢迎,支持定义类并使用CSS在对象上设置样式(包括其背景颜色)。请改为background-color
。