我想通过按住shift键来启用jQuery UI选择表格中的多选功能。
如果在鼠标单击时按下shift键,我应该执行以下操作:
- 获取最顶部已选元素
- 获取单击的元素
- 选择它们之间的所有元素
但是我找不到一种干净的方法来实现这个功能...
目前,在可选择配置中,我有以下内容:
start: function(e)
{
var oTarget = jQuery(e.target);
if(!oTarget.is('tr')) oTarget = oTarget.parents('tr');
}
所以,oTarget
是被点击的元素(而 e.currentTarget
是整个表格),但现在怎么办?我该如何找到已经选择了哪些元素,以一种可以告诉我点击的元素是否在已选元素之上或之下的方式,并选择它们之间的所有内容?
我现在是这样解决的,添加到可选择元素中:
jQuery(table).mousedown(function(e)
{
//Enable multiselect with shift key
if(e.shiftKey)
{
var oTarget = jQuery(e.target);
if(!oTarget.is('.ui-selectee')) oTarget = oTarget.parents('.ui-selectee');
var iNew = jQuery(e.currentTarget).find('.ui-selectee').index(oTarget);
var iCurrent = jQuery(e.currentTarget).find('.ui-selectee').index(jQuery(e.currentTarget).find('.ui-selected'));
if (iCurrent < iNew) {
iHold = iNew;
iNew = iCurrent;
iCurrent = iHold;
}
if(iNew != '-1')
{
jQuery(e.currentTarget).find('.ui-selected').removeClass('ui-selected');
for (i=iNew;i<=iCurrent;i++) {
jQuery(e.currentTarget).find('.ui-selectee').eq(i).addClass('ui-selected');
}
e.stopImmediatePropagation();
e.stopPropagation();
e.preventDefault();
return false;
}
}
}).selectable(...)
td
而不是tr
上,因此索引会变成一个更高的值。 - Matttd
和tr
都会触发,因此您可以在ui.selected.tagName === 'TD'
上返回。 - Matt