を押したままにして、jQueryUISelectableテーブルで複数選択機能を有効にしたいshift。
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(...)