根据其值动态更改每个单元格的背景颜色
Changing background color of each cell dynamically depending on its value
我 table 从 Oracle 数据库加载了两列。
一列包含 employee_name
,另一列是 phone_no
我是 运行 perl 中的 css
脚本,用于在电子邮件中发送 html
table。但是我想以用户友好的方式表示 table。
例如:
我想将第 1 列单元格的背景颜色更改为红色,其中 emplpyee_name=steven
。
我想将第 2 列单元格的背景颜色更改为红色,其中 phone_no=null
我想在加载期间动态更改 bgcolour
。我不要jQuery
,只有在css/html才有可能?
#!/efs/dist/perl5/core/5.8/exec/bin/perl
use EFSPerl::Version (
'DBD-Oracle' => '1.19',
'DBI' => '1.58'
);
use DBI;
use CommonFunctions;
my @HTML =();
$STYLE=<<STYLE;
<style type="text/css">
.myTable { background-color:#E6F0FF;border: 1px solid blue;border-collapse: collapse; }
.myTable th { background-color:#0066FF;color:white;font-size: 100%; }
.myTable td { padding:3px;border:1px solid #0066FF; }
</style>
STYLE
push(@HTML,"$STYLE");
push(@HTML,"<table class=\"myTable\" border=1><tr bgcolor=708090><th>EMPLOYEE_NAME</th><th>PHONE_NO</th></tr>");
$retCode=executeSQL(" SELECT EMPLOYEE_NAME, PHONE_NO FROM EMPLOYEE_TABLE");
push(@HTML,"</table>");
if($retCode) {
push(@HTML,"<tr><td> </td><td><td></td>");
push(@HTML,"<td></td><td></td></tr>");
}
&sendMail;
sub sendMail
{
$sub="test report";
$from='abc@example.com';
$to='123@xample.com.com';
open(MAIL, "|/usr/lib/sendmail -t");
print MAIL "From: $from "; print MAIL "To: $to ";print MAIL "Cc: $Cc ";
print MAIL "Subject: $sub ";
print MAIL "Content-Type: text/html ";
print MAIL "Content-Disposition:inline ";
print MAIL @HTML;
close(MAIL);
}
sub executeSQL
{
my $SQL=$_[0];chomp($SQL);
print "$SQL";
my $dsn = "dbi:Oracle:host=server.com;sid=sample;port=1111;";
my $dbuser = "username";
my $dbpass = 'password';
my $dbh = DBI->connect($dsn, $dbuser, $dbpass, { RaiseError => 1, AutoCommit => 0 });
my $sth=$dbh->prepare($SQL);
$sth->execute or die "EXEC ERROR $sth->errstr";
$count=0;
while (@ary = $sth->fetchrow_array) {
$count++;
push(@HTML,"<tr>");
foreach(@ary) {
chomp($_);
push(@HTML,"<td>$_</td>");
print "$_,";
}
push(@HTML,"</tr>");
}
$dbh->disconnect();
print "COUNT : $count";
return 1 if($count==0);
}
我在 CSS 中不知道有什么方法可以实现您所期望的,在 jQuery 中它真的很简单。
$(document).ready(function() {
$(element).css('background-color','color');
});
其中 element
是您正在使用的 #id
或 .class
或 div
。
color
是您计划使用的十六进制颜色,例如 #FF0000
是红色。
与其尝试做困难的事情,不如简单地做 jQuery。
我不确定我是否在你想要的时候做对了"change background color during the load"。但是当接收电子邮件客户端呈现您的 HTML 时,不再有动态过程 - 所有数据库交互都由您的脚本完成。因此,您可以在 perl 脚本中应用背景颜色,您不需要 JavaScript 甚至 jQuery.
您只需更改一小段代码:
在 "STYLE"-here-doc 添加
td.alert { padding:3px;border:1px solid #0066FF; background-color: #ff0000;}
像这样修改 executeSQL 的 while 循环体:
$count++;
push(@HTML,"<tr>");
chomp($ary[0]);
push(@HTML,sprintf("<td%s>%s</td>",
($ary[0] eq "steven") ? " class=\"alert\"" : "",
$ary[0]));
chomp($ary[1]);
push(@HTML,sprintf("<td%s>%s</td>",
(!length($ary[1]) || $ary[1] eq "1234") ? " class=\"alert\"" : "",
$ary[1]));
push(@HTML,"</tr>");
突出显示第二列中的空条目或条目“1234”。
我 table 从 Oracle 数据库加载了两列。
一列包含 employee_name
,另一列是 phone_no
我是 运行 perl 中的 css
脚本,用于在电子邮件中发送 html
table。但是我想以用户友好的方式表示 table。
例如:
我想将第 1 列单元格的背景颜色更改为红色,其中
emplpyee_name=steven
。我想将第 2 列单元格的背景颜色更改为红色,其中
phone_no=null
我想在加载期间动态更改 bgcolour
。我不要jQuery
,只有在css/html才有可能?
#!/efs/dist/perl5/core/5.8/exec/bin/perl
use EFSPerl::Version (
'DBD-Oracle' => '1.19',
'DBI' => '1.58'
);
use DBI;
use CommonFunctions;
my @HTML =();
$STYLE=<<STYLE;
<style type="text/css">
.myTable { background-color:#E6F0FF;border: 1px solid blue;border-collapse: collapse; }
.myTable th { background-color:#0066FF;color:white;font-size: 100%; }
.myTable td { padding:3px;border:1px solid #0066FF; }
</style>
STYLE
push(@HTML,"$STYLE");
push(@HTML,"<table class=\"myTable\" border=1><tr bgcolor=708090><th>EMPLOYEE_NAME</th><th>PHONE_NO</th></tr>");
$retCode=executeSQL(" SELECT EMPLOYEE_NAME, PHONE_NO FROM EMPLOYEE_TABLE");
push(@HTML,"</table>");
if($retCode) {
push(@HTML,"<tr><td> </td><td><td></td>");
push(@HTML,"<td></td><td></td></tr>");
}
&sendMail;
sub sendMail
{
$sub="test report";
$from='abc@example.com';
$to='123@xample.com.com';
open(MAIL, "|/usr/lib/sendmail -t");
print MAIL "From: $from "; print MAIL "To: $to ";print MAIL "Cc: $Cc ";
print MAIL "Subject: $sub ";
print MAIL "Content-Type: text/html ";
print MAIL "Content-Disposition:inline ";
print MAIL @HTML;
close(MAIL);
}
sub executeSQL
{
my $SQL=$_[0];chomp($SQL);
print "$SQL";
my $dsn = "dbi:Oracle:host=server.com;sid=sample;port=1111;";
my $dbuser = "username";
my $dbpass = 'password';
my $dbh = DBI->connect($dsn, $dbuser, $dbpass, { RaiseError => 1, AutoCommit => 0 });
my $sth=$dbh->prepare($SQL);
$sth->execute or die "EXEC ERROR $sth->errstr";
$count=0;
while (@ary = $sth->fetchrow_array) {
$count++;
push(@HTML,"<tr>");
foreach(@ary) {
chomp($_);
push(@HTML,"<td>$_</td>");
print "$_,";
}
push(@HTML,"</tr>");
}
$dbh->disconnect();
print "COUNT : $count";
return 1 if($count==0);
}
我在 CSS 中不知道有什么方法可以实现您所期望的,在 jQuery 中它真的很简单。
$(document).ready(function() {
$(element).css('background-color','color');
});
其中 element
是您正在使用的 #id
或 .class
或 div
。
color
是您计划使用的十六进制颜色,例如 #FF0000
是红色。
与其尝试做困难的事情,不如简单地做 jQuery。
我不确定我是否在你想要的时候做对了"change background color during the load"。但是当接收电子邮件客户端呈现您的 HTML 时,不再有动态过程 - 所有数据库交互都由您的脚本完成。因此,您可以在 perl 脚本中应用背景颜色,您不需要 JavaScript 甚至 jQuery.
您只需更改一小段代码:
在 "STYLE"-here-doc 添加
td.alert { padding:3px;border:1px solid #0066FF; background-color: #ff0000;}
像这样修改 executeSQL 的 while 循环体:
$count++;
push(@HTML,"<tr>");
chomp($ary[0]);
push(@HTML,sprintf("<td%s>%s</td>",
($ary[0] eq "steven") ? " class=\"alert\"" : "",
$ary[0]));
chomp($ary[1]);
push(@HTML,sprintf("<td%s>%s</td>",
(!length($ary[1]) || $ary[1] eq "1234") ? " class=\"alert\"" : "",
$ary[1]));
push(@HTML,"</tr>");
突出显示第二列中的空条目或条目“1234”。