我有一个带有滚动条的 html 表(即设置了溢出)。当我滚动表格时,我想获得当前顶行的位置(即根据表格的用户视图)。
我该怎么做?
你们中的任何人都可以帮我举个例子吗?
我有一个带有滚动条的 html 表(即设置了溢出)。当我滚动表格时,我想获得当前顶行的位置(即根据表格的用户视图)。
我该怎么做?
你们中的任何人都可以帮我举个例子吗?
如果您使用 vanilla JavaScript,这可能会帮助您入门。它绝对不是完美的,但可能会激发一些想法...... JSFiddle 示例
[更新]来自上面链接的代码
JavaScript
document.getElementById('btn').onclick = function() {
var tbl = document.getElementById('tbl');
var scrollAmt = document.getElementById('asdf').scrollTop;
var totalRowHeight = 0,
viewTolerance = 1/3, //if only 1/3 of row is showing highlight next row
rowHeight;
for( var i = 0; i < tbl.rows.length; i++ ) {
totalRowHeight += rowHeight = tbl.rows[i].offsetHeight;
if( totalRowHeight > scrollAmt ) {
//if row doesn't meet viewTolerance requirement highlight next row
var rowIndex = (totalRowHeight - scrollAmt < rowHeight*viewTolerance) ? i + 1: i;
tbl.rows[rowIndex].style.backgroundColor = '#ff00ff';
break;
}
}
}
HTML
<div id="asdf">
<table id="tbl">
<tbody>
<tr><td>asdf</td><td>asdf1</td></tr>
<tr><td>asdf</td><td>asdf2</td></tr>
<tr><td>asdf</td><td>asdf3</td></tr>
<tr><td>asdf</td><td>asdf4</td></tr>
<tr><td>asdf</td><td>asdf5</td></tr>
<tr><td>asdf</td><td>asdf6</td></tr>
<tr><td>asdf</td><td>asdf7</td></tr>
<tr><td>asdf</td><td>asdf8</td></tr>
</tbody>
</table>
</div>
<input type="button" value="getTop()" id="btn" />
CSS
#asdf{
height:100px;
overflow:scroll;
}
如果你不想使用 JQuery,你可以这样做。
<script language="javascript">
function DoSomethingWithTopRowOfTable {
var myTable = document.getElementById('IdOfYourTable');
var tr = myTable.rows(i);
//To access the first cell...
var cll = tr.cells(0);
//To get text of first cell in first row...
var cellText = cll.innerText;
}
</script>
这是一些模拟代码..它将最顶部的[相对于用户的观点]表格行的背景颜色设置为#FF00FF。尚未使用嵌套表对此进行测试。它也可能会在你的表中获取表的行......所以你必须在测试之前检查你的 TRs 的 parentNode。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script>
function findScreenPosition(element) {
if (element.offsetParent)
{
var parentPos = findScreenPosition(element.offsetParent);
return [element.offsetLeft + parentPos[0],
element.offsetTop - element.scrollTop + parentPos[1]
];
}else{
return [element.offsetLeft,
element.offsetTop - element.scrollTop
];
}
}
var lastTopElement = null;
window.onscroll = function()
{
table = document.getElementById("table");
var innerRows = table.getElementsByTagName("tr");
var done = false;
for(var i = 0; i < innerRows.length && !done; i++)
{
if(findScreenPosition(innerRows[i])[1]+innerRows[i].offsetHeight > 0)
{
done = true;
innerRows[i].style.backgroundColor = "#FF00FF";
if(lastTopElement != null)
lastTopElement.style.backgroundColor = "";
lastTopElement = innerRows[i];
}
}
};
</script>
</head>
<body>
<table width="500px" id="table">
<tr><td>this is a row</td></tr>
<tr><td>this is a row</td></tr>
<tr><td>this is a row</td></tr>
<tr><td>this is a row</td></tr>
<tr><td>this is a row</td></tr>
<tr><td>this is a row</td></tr> <!-- repeat as much as you want... this works with scrolling too -->
</table>
</body>
</html>
$("table:first").find("tr:first")