通过拖动选择表格上的单元格
IT技术
javascript
2021-01-25 15:24:43
3个回答
这是一个工作原型:http : //jsfiddle.net/few5E/使用 jQuery 进行 DOM 挂钩,但可以使用另一个框架轻松实现。
更新:http : //jsfiddle.net/Brv6J/一个略有不同的版本 - 突出显示的状态只会在您释放并再次单击时发生变化。
更新 2:http : //jsfiddle.net/Brv6J/3/ - 绑定 onselectstart 以便在 IE 中不选择文本。
一些相关的事实:
- 表格单元格的 mousedown 事件被挂钩以跟踪实际点击。此事件已停止,因此会阻碍文本选择。也在 IE 中绑定 ontextselect 以获得相同的效果。
- 鼠标悬停事件将切换单元格的突出显示类
- mouseout 事件挂在 上
document。这是为了确保它始终运行。如果 mouseup 事件挂在表格单元格上,则如果您在表格外释放鼠标键,则不会触发该事件。此状态在 中跟踪isMouseDown。
完整源代码供参考:
<!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" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<style type="text/css" media="screen">
table td {
width:100px;
height:100px;
text-align:center;
vertical-align:middle;
background-color:#ccc;
}
table td.highlighted {
background-color:#999;
}
</style>
</head>
<body>
<table cellpadding="0" cellspacing="1" id="our_table">
<tr>
<td>a</td>
<td>b</td>
<td>c</td>
</tr>
<tr>
<td>d</td>
<td>e</td>
<td>f</td>
</tr>
<tr>
<td>g</td>
<td>h</td>
<td>i</td>
</tr>
</table>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript" charset="utf-8">
$(function () {
var isMouseDown = false;
$("#our_table td")
.mousedown(function () {
isMouseDown = true;
$(this).toggleClass("highlighted");
return false; // prevent text selection
})
.mouseover(function () {
if (isMouseDown) {
$(this).toggleClass("highlighted");
}
})
.bind("selectstart", function () {
return false; // prevent text selection in IE
});
$(document)
.mouseup(function () {
isMouseDown = false;
});
});
</script>
</body>
</html>
如果您在选择类似电子表格的单元格(在列/行块中),则需要在鼠标悬停事件中突出显示开始和结束索引(行和单元格)之间的每一行中的每个单元格:
for (var i = rowStart; i <= rowEnd; i++) {
var rowCells = table.find("tr").eq(i).find("td");
for (var j = cellStart; j <= cellEnd; j++) {
rowCells.eq(j).addClass("selected");
}
}
由于用户可能会从各个方向(自上而下、自下而上、右左、左右)开始选择单元格,因此您需要为开始和结束分配正确的索引。
这是一个jsFiddle。
http://www.jaanuskase.com/stuff/dragSelect.html
不确定您是否想要纯 Javascript 实现,为了方便起见,我使用了 jQuery。
其它你可能感兴趣的问题
