我在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;
});
}
答案 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,你就不能先从变量中删除它们。