根据其值动态更改每个单元格的背景颜色

Changing background color of each cell dynamically depending on its value

我 table 从 Oracle 数据库加载了两列。

一列包含 employee_name,另一列是 phone_no

我是 运行 perl 中的 css 脚本,用于在电子邮件中发送 html table。但是我想以用户友好的方式表示 table。

例如:

  1. 我想将第 1 列单元格的背景颜色更改为红色,其中 emplpyee_name=steven

  2. 我想将第 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>&nbsp;</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.classdiv

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”。