过滤未显示的tr out中的td元素

时间:2013-07-31 11:55:56

标签: javascript jquery html datatable selector

我在asp.net中有一个我想要修改的数据表。我选择带有JQuery的Datatable的<tr>行:

var rows = $("#dgInformation tr:gt(0)");

但是,<tr>元素有多个<td>元素,其中一些元素标记为display:none。如何在没有隐藏单元格的情况下获得rows - 变量?

这样做的目的是检查单元格是否彼此不同,并且每个差异只应显示一行。如果我不过滤未显示的元素,他们也会比较,我有线,在视觉上是相同的。

更新 它只需要向<td>添加一个CSS类 - 应该隐藏的元素。然后你有一个干净的DOM树(我希望我可以这样称呼它)在Firebug中。以下整个功能供参考:

function filterTable()

{       
        var rows = $("#dgInformation tr:gt(0)");
        var prevRow = null;
        var counter = 2;
        rows.each(function (index) {
            if (prevRow !== null) {
                var i = 1;
                var changes = 0;
                $(this).children("td:visible").each(function () {
                    if(i > 2){
                        if ($(':nth-child(' + i + ')', $(prevRow)).html() != $(this).html()) 
                        {
                            $(':nth-child(' + i + ')', $(prevRow)).css('backgroundColor', '#00FF00');
                            changes = changes + 1;    
                        }
                    }
                    i++;
                });
                if(changes == 0)
                {
                    $(prevRow).css('display','none');
                    $(prevRow).removeClass();       
                }                 
                else
                {
                    $(prevRow).removeClass();       
                    if(counter % 2 == 0)
                        $(prevRow).addClass('dgItemStyle');
                    else
                        $(prevRow).addClass('dgAlternatingItemStyle');
                    counter = counter + 1;
                }


            }
            prevRow = this;
        });
    }

4 个答案:

答案 0 :(得分:1)

试试这个:

var rows  =  $("#dgInformation tr:gt(0)").find('td').not(':visible').remove();

答案 1 :(得分:1)

您可以使用:not()过滤器。

如果你有像

这样的HTML
<table id='tableid'>
    <tr><td></td>
        <td class="hidden">Hidden Cell</td>
        <td>3</td>
        <td>4</td></tr>
    <tr>
        <td>5</td>
        <td class="hidden">Hidden Cell</td>
        <td>6</td>
        <td>7</td>
    </tr>
    <tr>
        <td>8</td>
        <td class="hidden">Hidden Cell</td>
        <td>9</td>
        <td>1</td>
    </tr>
</table>

CSS:

.hidden{
    display:none;
}

脚本: 如果你想要那个表中没有隐藏的td元素的所有td元素,那么

var rows = $("#dgInformation tr:gt(0) td:not('.hidden')");

它会起作用!!

答案 2 :(得分:0)

我看到你正在使用jQuery ..所以

var rows = $("#dgInformation tr:gt(0)").not($("#dgInformation tr:gt(0)").has("td[display=none]"));

工作?

答案 3 :(得分:0)

由于您只想要可见的td,以下内容应该足够了:

var visible_cells = $("#dgInformation tr:gt(0)").find("td:visible");

如果您想要那些不可见的,请改用:hidden:)

<强>更新

我不确定你的意思是“如果没有那些隐藏的单元格我怎么能得到行变量?”。

如果我读得正确,你基本上想要这行,并从变量中删除不可见的单元格,但保留在HTML中。
这是不可能的,因为您保存的变量仍然基于实际的HTML。行变量甚至不包含任何子项。当您专门请求它们时,它们将在DOM中查找。

但是,我假设在您的代码的某个后期,您实际上获得了所选行的<td>个孩子。在需要时对它们应用:visible过滤器,制作第二个变量来保存您想要的孩子,就像我在答案中建议的那样。

如果不改变HTML,你就不能先从变量中删除它们。