如何计算HTML表中*可见*行的数量
How to count the number of *visible* rows in an HTML table?
我的意思是在PrimeFaces(5.2)中显示一个(只读,无过滤,无延迟加载)表,其中表应该一直延伸到"空行"的页脚,如果没有足够的行。页脚有一个固定的位置,所以如果表有太多行,就会得到一个滚动条。似乎获得空行的标准解决方案是返回"假行"以及结果。但是我不知道要返回多少行,因为服务器不知道客户端可以看到多少行,所以我返回的比可以合理看到的多(100)。我的计划是然后用JavaScript删除不需要的虚拟行,通过检查他们的"可见性",但这被证明是一个不可能完成的任务。迄今为止,我所见过的检查可视性的方法都不奏效。我的表定义如下:
<p:dataTable id="tableId" var="orderView" value="#{orderTable.getPaddedOrderViews(100)}"
emptyMessage="EMPTY" scrollable="true" scrollHeight="550"
resizableColumns="true" resizeMode="fit">
...
(getPaddedOrderViews(100)应该返回至少 100行,如果需要填充假行)
和下面的代码应该找到可见/不可见的行(所以我可以修改它以删除不可见的虚拟行):
function isVisible1(ele) {
if (ele !== null &&
ele !== undefined &&
ele.clientWidth !== 0 &&
ele.clientHeight !== 0) {
var style = window.getComputedStyle(ele,null);
return style !== null &&
style !== undefined &&
style.opacity !== 0 &&
style.visibility !== 'hidden' &&
style.display !== 'none';
}
return false;
}
function isVisible2(ele) {
return ele !== null &&
ele !== undefined &&
ele.clientWidth !== 0 &&
ele.clientHeight !== 0 &&
ele.style !== null &&
ele.style !== undefined &&
ele.style.opacity !== 0 &&
ele.style.visibility !== 'hidden' &&
ele.style.display !== 'none';
}
function isVisible3(ele) {
return ele.offsetWidth > 0 || ele.offsetHeight > 0;
}
function countVisibleRows() {
var count = 0;
var result1 = 0;
var result2 = 0;
var result3 = 0;
var r;
for (r in document.getElementById("tableId_data").rows) {
count++;
/*
FAILS BECAUSE window.getComputedStyle(ele,null) says
argument 1 is not an object
if (isVisible1(r)) {
result1++;
}*/
if (isVisible2(r)) {
result2++;
}
if (isVisible3(r)) {
result3++;
}
}
return [count,result1,result2,result3];
}
jQuery(document).ready(function () {
jQuery(document).ready(function () {
// twice in document.ready to execute after Primefaces callbacks
try {
alert("ROWS: "+countVisibleRows());
}
catch(err) {
alert(err.message);
}
});
});
但是它显示"ROWS:[103,0,0,0]"对于一个表,我可以看到大约22(非空/假)行(我希望得到的数字),有更多的隐藏。有些是我的虚拟行,但在这种情况下我看不到它们。103证明(IMHO),我正确地获取了行。
isVisible1(ele)调用window.getComputedStyle(ele,null)失败。isVisible2(ele)总是返回false,因为没有行具有样式属性,isVisible3(ele)也总是返回false。
那么,为什么行没有任何'样式',我怎么知道如果没有这个'样式'他们是可见的?
关于计算可见行的许多问题/解决方案只适用于"过滤"表,但这并不适用于我的情况。
如果可以从表本身以某种方式提取可见行数,而不是检查行,这也将解决我的问题。
我以这个问题为基础,找出如何检查可见性
如果我理解正确的话,您想要删除溢出行。
因为你是使用jQuery可以做到这一点很容易通过比较行的偏移量的底部的容器
var $cont = $('#container')
var contBottom = $cont.height() + $cont.offset().top;
$('tr').filter(function () {
var $row = $(this),
top = $row.offset().top,
ht = $row.height();
return (top + ht) > contBottom;
}).remove()
演示- 用程序搜索JQuery数据表中的文本
- 使用谷歌应用程序脚本从工作表中获取值并将其显示在文本框中
- 可以'我不明白为什么;t将行和单元格添加到表中
- 将行添加到具有固定标题的HTML表中
- 表中单元格的总和
- 将数组中的值插入到表中
- 如何首先设置样式<td>表中包含在窗体中的元素
- 通过单击动态加载的表中同一行的另一个字段来更新一行的字段
- 如何使用Javascript在HTML表中查找第一个空行
- 将一个表的id与另一个表中的user_id进行匹配,以获取mysql中的记录
- 如何使用提交按钮搜索表中的记录
- 更改智能表中的页面将停止JQuery函数的工作
- 在动态表单的可见部分中,如何使用javascript生成所需的某些字段
- 硒网络驱动程序获取表中可见的行号
- 如何计算HTML表中*可见*行的数量
- 修改筛选器,使其仅应用于表中的可见行
- 每次在我的表中只保留一个可见的部分
- 如何在Jquery中选择表中的所有行而不是可见行
- jQuery-如何计算表中隐藏或可见的行数
- 如何在使用 colReorder 后获取数据表中所有列(可见或不可见)的当前顺序