用鼠标选择表中包含数字的分区并求和值
Selecting Divs in Table that Contain Numbers w/ Mouse and Summing Values
所以我有一个表,其中每个td标记都包含一个div标记,该标记在其innerHTML中包含一个数字。当用户按住鼠标左键并在数字之间拖动以选择它们时,我想在选择数字时用数字的总和更新文档中的标签。我想这应该是非常直接的,但在到处搜索后,我不知道如何做到这一点。如有任何帮助,我们将不胜感激。
<table style="cursor: default;" id="">
<tbody>
<tr>
<td>
<div id=“1” class="sequence_div selectable"> 1 </div>
</td>
<td>
<div id=“2” class="sequence_div selectable"> 2 </div>
</td>
<td>
<div id=“3” class="sequence_div selectable"> 3 </div>
</td>
<td>
<div id=“4” class="sequence_div selectable"> 4 </div>
</td>
<td>
<div id=“5” class="sequence_div selectable"> 5 </div>
</td>
</tr>
</tbody>
不确定拖动选择位,所以我假设选择是由click
(或mousedown
(完成的,但更改事件以适应。选定的td
将具有类别.selected
:
$('td').on('click', function() {
$(this).toggleClass('selected');
var sum = parseInt($('#sum').text()) || 0;
var val = parseInt($(this).find('.sequence_div').text());
if($(this).hasClass('selected'))
$('#sum').text(sum + val);
else
$('#sum').text(sum - val);
});
如果td
只包含带数字的div,则可以省略.find('.sequence_div')
位。
jsfiddle演示
编辑:
$(document).mousedown(function() {
$('td').bind('mouseover',function(){
$(this).toggleClass('selected');
var sum = parseInt($('#sum').text()) || 0;
var val = parseInt($(this).find('.sequence_div').text());
$(this).hasClass('selected') ? $('#sum').text(sum+val) : $('#sum').text(sum-val);
});
})
$(document).mouseup(function() {
$('td').unbind('mouseover');
});
jsfiddle演示
编辑#2:
如果你想让一个新的mousedown
在开始时触发一个新选择,你可以有这样的东西:
$(document).mousedown(function() {
$('td').removeClass('selected');
$('#sum').text(0);
$('td').bind('mouseover',function(){
//rest of the code
但可能在table
上使用mousedown/up
比使用document
更好。
这是我的尝试,纯JS,它使用了一些ES5方法,因此可能无法在旧的浏览器上工作:
var box = {};
var area = document.getElementById('area');
var sum = document.getElementById('sum');
var vals = [].slice
.call(document.querySelectorAll('.sequence_div'))
.map(function(node){ return {
val: parseInt(node.textContent,10),
box: node.getBoundingClientRect()
}});
window.addEventListener('mousedown', function(evt){
box.x = evt.clientX;
box.y = evt.clientY;
});
window.addEventListener('mousemove', function(evt){
if(Object.keys(box).indexOf('x') !== -1){
var rect = {
t: Math.min(evt.clientY,box.y),
l: Math.min(evt.clientX,box.x),
w: Math.abs(evt.clientX - box.x),
h: Math.abs(evt.clientY - box.y)
};
area.setAttribute('style', 'display:block;' +
'top:' + rect.t + 'px;left:'+ rect.l + 'px;' +
'width:' + rect.w + 'px;height:' + rect.h + 'px;'
);
sum.textContent = vals.filter(function(val){
return val.box.top >= rect.t &&
val.box.top + val.box.height <= rect.t + rect.h &&
val.box.left >= rect.l &&
val.box.left + val.box.width <= rect.l + rect.w;
}).reduce(function(memo, val){
return memo + val.val;
},0);
}
});
window.addEventListener('mouseup', function(evt){
area.removeAttribute('style');
sum.textContent = 0;
box = {};
});
JSFiddle 上的工作演示
相关文章:
- 内部分区字体大小获胜'调整浏览器窗口大小时不会随媒体查询而更改
- 设置滑块分区上的滚动
- 单击按钮后如何逐个调用分区,上一个分区将隐藏
- JQuery移动动态分区页面
- 多维数据集网格未在指定的分区中绘制
- 如何在php中的jquery中对循环内的选择框值求和
- 如何在jquery中使用实时计算求和值
- 尝试求和时,在我的表的页脚中返回$NaN
- 使用moment.js获取时间分区的偏移日期对象
- 单击子分区外部时关闭灯箱
- 如何在单击按钮时显示一个分区,同时隐藏另一个分区
- 隐藏/显示下面的分区根据是否选择某个选项进行选择
- 在键值对中对求和值进行下划线
- D3.js:将一个有响应的饼图放在其父分区的中心
- 如何按对象数组进行分组和求和
- 如何使用jquery对货币格式的数字求和
- 使用2个下拉列表显示/隐藏分区
- 将整张桌子放在它的外分区中心
- Skrollr.更改固定分区中的内容
- 用鼠标选择表中包含数字的分区并求和值