0

我想隐藏<tr>'s 基于 a<td>中的背景颜色<tr>,我当前的代码根据<tr>'s 中的文本隐藏 's<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;
    }
}

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

4

1 回答 1

1

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

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

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/

但...

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

例如:

if($(this).hasClass('redBackground')){
    //whatever
}
于 2013-08-22T09:48:53.213 回答