JQuery根据背景颜色隐藏td

时间:2013-08-22 09:38:50

标签: jquery html-table

我想根据<tr><td>的背景颜色隐藏<tr>,我的当前代码会根据文本隐藏<tr><td>,但这不是一个很好的解决方案。该表是一个日历,所以如果JQuery可以隐藏基于背景颜色的表行会很好。

我目前的代码:

function ShowAbsence()
{
    if(!presenceActive) clearPresence();
    $('table#newspaper-a tr:not(#header, #trWeekNummer)').each(function() { 
        var toggle1 = true;
        $('td:not(#firstlastname)',this).each(function() { 
            if($(this).text() == "f" || $(this).text() == "M" || $(this).text() == "A") {
                toggle1 = false;
            }
        });
        if(toggle1) {
            $(this).toggle();
        }
    });

    if(absenceActive) {
        absenceActive = false; 
    } else {
        absenceActive = true;
    }
}

这样可以正常工作,但正如您所看到的,它会根据单元格中的文本隐藏。我希望你可以帮我隐藏它背景颜色!

1 个答案:

答案 0 :(得分:1)

您必须使用jQuery的$.css()功能,以便获得与选择器关联的颜色样式。

这将返回一个RGB值(如rgb(255,0.221)),因此为了将其转换为十六进制(#ff00dd类型),您需要使用此函数(提取from this other question ):

function hexc(colorval) {
    var parts = colorval.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
    delete(parts[0]);
    for (var i = 1; i <= 3; ++i) {
        parts[i] = parseInt(parts[i]).toString(16);
        if (parts[i].length == 1) parts[i] = '0' + parts[i];
    }
    color = '#' + parts.join('');
    return color;
}
因此,你可以这样:

if (hexc($('#demo').css('background-color')) == '#ff00dd') {
    alert("Works!!");
}

活生生的例子:http://jsfiddle.net/vyQKV/1/

BUT ...

我强烈建议你使用课程而不是处理颜色。应使用不同的类定义背景颜色,为了检查背景颜色,您应该使用$.hasClass()检查课程

例如:

if($(this).hasClass('redBackground')){
    //whatever
}