-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathjquery.shift-select-table.js
More file actions
39 lines (32 loc) · 1.26 KB
/
jquery.shift-select-table.js
File metadata and controls
39 lines (32 loc) · 1.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
(function($){
function toggleSelected(element, shouldSelect) {
$(element).attr("checked", shouldSelect);
$(element).parents("tr").toggleClass("selected", shouldSelect);
}
$.fn.shiftSelectTable = function(){
var $table = $(this);
$table.find(":checkbox").click(function(event){
var last = $table.data("jquery-shift-select-table.last");
$table.data("jquery-shift-select-table.last", $(this).get());
if(last == null || !event.shiftKey) {
$(this).parents("tr").toggleClass("selected");
}
else {
var shouldSelect = $(this).attr("checked");
var $checkboxes = $table.find(":checkbox");
var currentIndex = $checkboxes.index(this);
var lastIndex = $checkboxes.index($(last));
var $checkboxesToChange = (currentIndex >= lastIndex) ? $checkboxes.slice(lastIndex, currentIndex+1) : $checkboxes.slice(currentIndex, lastIndex+1);
$checkboxesToChange.each(function(){
toggleSelected(this, shouldSelect);
});
}
});
this.find(":checked").parents("tr").toggleClass("selected");
return this;
};
})(jQuery);
/*
if unchecking --> all from current to last should UNCHECK
if checking --> all from current to last should CHECK
*/