Я не уверен, что это все еще интересно, но сегодня я реализовал опцию множественного выбора (Click / Ctrl-Click / Shift-Click) в сетке дерева, установив атрибут aria-selected (true / false) и добавив/ удаление класса ui-state-highlight для визуальных эффектов.
Все это происходит в обратном вызове beforeRowSelect, который возвращает false, чтобы предотвратить нормальный обратный вызов выбора строки.
Надеюсь, что это может помочь кому-то еще!Я программирую как пятилетний ребенок, поэтому, пожалуйста, будьте осторожны со мной!: -)
Последнее примечание: переменная lastSelIdx является глобальной переменной, хранящей индекс последней выбранной строки, и ее необходимо объявить вне функции.
beforeSelectRow: function(id, e) {
var row = $("#" + id);
var currSelIdx = $("#tree").getInd(id) - 1;
if (e.ctrlKey) {
// Ctrl was pressed - Add to selection or remove
if (row.attr("aria-selected") == "true") {
row.removeClass("ui-state-highlight").attr("aria-selected", "false");
} else {
row.addClass("ui-state-highlight").attr("aria-selected", "true");
}
lastSelIdx = currSelIdx;
} else if (e.shiftKey) {
// Shift was pressed. Select all between last selected and curently selected
var rows = $(".jqgrow");
// Select all rows between the last selected
if (!lastSelIdx) lastSelIdx = 0;
if (lastSelIdx > currSelIdx) {
selmin = currSelIdx;
selmax = lastSelIdx;
} else {
selmin = lastSelIdx;
selmax = currSelIdx;
}
for (i = 0; i < rows.length; i++) {
if (i >= selmin && i <= selmax) {
$(rows[i]).addClass("ui-state-highlight").attr("aria-selected", "true");
} else {
$(rows[i]).removeClass("ui-state-highlight").attr("aria-selected", "false");
}
}
} else {
// Simple click
$("tr[aria-selected=true]").each(function() {
$(this).removeClass("ui-state-highlight").attr("aria-selected", "false");
});
row.addClass("ui-state-highlight").attr("aria-selected", "true");
lastSelIdx = currSelIdx;
}
return false;
},