Вот простой пример, использующий мой ответ на ваш предыдущий вопрос: http://www.jsfiddle.net/yijiang/83W7X/2/embedded/result
var selected = [];
function drawSelection(){
if(selected.length){
selected.sort(function(a, b){
if(a.sourceIndex){
return a.sourceIndex - b.sourceIndex;
} else if(a.compareDocumentPosition){
if(a.compareDocumentPosition(b) == Node.DOCUMENT_POSITION_PRECEDING){
return 1;
} else {
return -1;
}
}
});
var range = rangy.createRange(),
sel = rangy.getSelection();
range.setStart(selected[0].children[0], 0);
range.setEnd(selected[selected.length - 1].children[0], 1);
sel.setSingleRange(range);
}
}
$('ul').selectable({
delay: 100,
selecting: function(event, ui) {
if(ui.selecting.getAttribute('class').indexOf('wrapper') !== -1 && $.inArray(ui.selecting, selected) === -1) {
selected.push(ui.selecting);
drawSelection();
}
},
unselecting: function(event, ui){
if(ui.unselecting.getAttribute('class').indexOf('wrapper') !== -1 && $.inArray(ui.unselecting, selected) > -1){
selected.splice($.inArray(ui.unselecting, selected), 1);
drawSelection();
}
}
});
Он сочетает в себе выбираемый пользовательский интерфейс jQuery с превосходной библиотекой Тима Дауна Rangy, чтобы создать нечто похожее на то, что вы просили,Я думаю.То, что вы просили, было не совсем понятно.
Код содержит массив выбранных li
элементов.Вторая часть кода добавляет соответствующие обработчики событий и параметры.Функция drawSelection
вызывается каждый раз, когда элемент выбирается или отменяется.Функция сначала сортирует все элементы по их положению в DOM, затем переходит к рисованию выбора от первого выбранного li
до последнего.
Код, подобный theazureshadow , предназначен только для проверки концепции, поскольку я абстрагируюсь от того, что действительно должно быть простой задачей выбора li
s для довольно тяжелого Rangyбиблиотека.Это также не очень хорошо работает и может быть сделано с некоторым рефакторингом.