我正在尝试将链接中链接文本的颜色更改为另一个脚本(不受我控制)生成的页面上的黄色。更具体地说,我正在本页的两个表中搜索特定文本。一旦我找到文本(这是超链接),我想将其颜色更改为黄色。
我正在使用HTML :: Element,我可以轻松找到文本。问题是,没有指定的链接颜色,因此链接使用默认值blue。我正在尝试将标记颜色的HTML元素添加到标记中,但我没有太多运气。
如果我尝试使用类似的东西(其中“$ a”是我试图编辑的链接的HTML :: Element对象):
$a->attr("font color", "yellow");
它添加了属性,但不会更改链接内容的文本颜色。
如果我尝试这样的话:
my $content = $a->content;
$content->attr("font color", "yellow");
只添加文字
<font color=yellow>
到内容时,不再更改实际内容文本颜色。
尝试拼接它也不起作用。
我终于找到了这个:
my $yellowFont = HTML::Element->new('font', 'color' => 'yellow');
foreach my $item_ref ($a->content_refs_list) {
next if ref $$item_ref;
$yellowFont->push_content($$item_ref);
}
print $yellowFont->as_HTML, "\n";
在它创造的意义上它的作用非常好:
<font color="yellow">201301022150-Job5</font>
但是这个改变没有反映在html文档中!
我不知道如何将字体颜色属性插入到原始的html文档中。
以下是我的整个脚本。这是一团糟,因为我一直在尝试各种不同的方法而没有成功。
#!/usr/local/bin/perl
use warnings;
use strict;
use HTML::TableExtract qw(tree);
use Data::Dumper qw(Dumper);
my @jobList = ();
if ($ARGV[0]) {@jobList = $ARGV[0];} else {die ("Need list of jobs as argument\n")};
my $ddHTMLFile = "./tmp_aptg";
my $te1 = HTML::TableExtract->new( depth => 1, count => 0);
my $te2 = HTML::TableExtract->new( depth => 1, count => 1);
$te1->parse_file($ddHTMLFile);
$te2->parse_file($ddHTMLFile);
my $table1 = $te1->first_table_found;
my $table2 = $te2->first_table_found;
my $table1_tree = $table1->tree;
my $table2_tree = $table2->tree;
foreach my $a ($table1_tree->find_by_tag_name("a")) {
my $href = $a->attr("href");
if ($href =~ m/$jobList[0]/) {
my $yellowFont = HTML::Element->new('font', 'color' => 'yellow');
foreach my $item_ref ($a->content_refs_list) {
next if ref $$item_ref;
$yellowFont->push_content($$item_ref);
}
#print $yellowFont->as_HTML, "\n";
$a->replacewith
$a->dump;
#my $table1_html = $table1_tree->as_HTML;
#my $document1_tree = $te1->tree;
#my $document1_html = $document1_tree->as_HTML;
#my $document_html = $document1_html;
#print "$document_html";
}
}
答案 0 :(得分:3)
每次有人使用<font>
标记时,我们都必须牺牲hecatomb cute kittens CSS来承诺语义标记的愤怒的webdev。字体本身没有语义。相反,这些事情可以很容易地通过HTML::Element
documentation来完成,这在改变元素的颜色时非常擅长。
要将一个元素的颜色设置为黄色,我们必须将以下代码添加到style
属性中:
color: yellow !important;
像
这样的东西$a->attr(style => "color: yellow !important;");
很可能会做到这一点,尽管这会覆盖任何以前的内容。我们可以尝试将我们的颜色添加到之前的内容中,但我们无法保证已经存在的CSS有效。
如果目标浏览器理解CSS3(*叹气*),我们可以使用一些不错的选择器来为我们完成这项工作,例如
<style>
table a[href~="$foo"] { color: yellow !important }
</style>
其中$foo
包含一个理智匹配的合理字符串(没有正则表达式)。
这是一个数据网址,您可以将其复制并粘贴到地址栏中,以便查看(希望如此):
data:text/html,<style>table a[href~="foo"] { color: yellow !important }</style><table><tr><td><a href="bar">bar</a></td><td><a href="foo">foo</a></tr></table>
另一个解决方案是创建一个带有CSS的新<span>
元素,并且是该链接的唯一子元素。 <a>
的前儿童将成为<span>
的孩子。
# not tested, but looks reasonable
my $span = HTML::Element->new("span", style => "...");
my @childs = $a->detach_content;
$span->push_content(@childs);
$a->push_content($span);
这与之前的解决方案略有不同,但除非在页面布局中使用了一些高级CSS技巧,否则这种差异并不重要。
如果您确实 ,则可以使用此解决方案来使用字体标记
&#34;请不要这样做!我们可以<span>
吗?&#34; ←小猫。
要了解您可以对HTML元素对象执行的操作,请参阅{{3}}。