1

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

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

但是,<tr>元素有多个<td>元素,其中一些被标记为display:none。如果没有那些隐藏的单元格,我如何获得rows-variable?

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

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

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

4 回答 4

1

试试这个:

var rows  =  $("#dgInformation tr:gt(0)").find('td').not(':visible').remove();
于 2013-07-31T12:19:25.517 回答
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')");

它会工作的!

于 2013-07-31T12:19:28.300 回答
0

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

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

工作?

于 2013-07-31T12:08:22.670 回答
0

由于您只想要可见的 td,因此以下内容就足够了:

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

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

更新

我不确定“如果没有那些隐藏的单元格,我如何获得行变量?”是什么意思。

如果我没看错,您基本上想要该行,并将其不可见的单元格从变量中删除,但保留在 HTML 中。
这是无法做到的,因为您持有的变量仍然基于实际的 HTML。行变量甚至不包含任何孩子。当您特别请求它们时,它们将在 DOM 中查找。

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

您不能在不更改 HTML 的情况下先发制人地从变量中删除它们。

于 2013-07-31T12:25:40.633 回答