Puede usar un conjunto de controladores de eventos personalizados para controlar cómo se comportan la selección y la desición. Con este conjunto de controladores nunca se deselecciona nada a menos que se seleccione y vuelva a hacer clic en él sin hacer un rango de selección. Si elimina el if (event.detail == 0) {
y sus enunciados relacionados, la selección de rango actuará como inversión de rango; todo lo que esté en el rango seleccionado se deseleccionará, y viceversa.
var _selectRange = false, _deselectQueue = [];
$(function() {
$("#selectable").selectable({
selecting: function (event, ui) {
if (event.detail == 0) {
_selectRange = true;
return true;
}
if ($(ui.selecting).hasClass('ui-selected')) {
_deselectQueue.push(ui.selecting);
}
},
unselecting: function (event, ui) {
$(ui.unselecting).addClass('ui-selected');
},
stop: function() {
if (!_selectRange) {
$.each(_deselectQueue, function (ix, de) {
$(de)
.removeClass('ui-selecting')
.removeClass('ui-selected');
});
}
_selectRange = false;
_deselectQueue = [];
}
});
});
While it lasts, here's a jsfiddle example.
lazo (arrastrando un cuadro) o con un clic del mouse seleccionará elementos múltiples individuales/adyacentes; el control solo se necesita para la selección no continua. – VinayC