Tôi không thể tìm hiểu cách lấy phần tử đích với jQuery UI có thể sắp xếp.jQuery có thể sắp xếp lấy 2 phần tử được hoán đổi
$("#pages").sortable({
opacity: 0.6,
update: function(event, ui) {
var first = ui.item; // First element to swap
var second = ???? // Second element to swap
swapOnServer(first, second);
}
});
Tất cả các tùy chọn Tôi đã thử điểm đến nguyên tố này được rê đến, nhưng không phải là người nó được hoán đổi với: ui.item[0]
, event.srcElement
, event.toElement
.
Ngoài ra, this
trỏ đến phần tử LIST (OL).
Nói thứ hai Ý tôi là như sau:
gốc trật tự là:
| 0 | | 2 | |
Chúng tôi kéo yếu tố 1 và thả nó ở vị trí 3. Mà sẽ kết thúc với:
| 0 | | 2 | |
Vì vậy, phần tử đầu tiên là 1 và phần tử thứ hai là 3 (WRONG! Xem bên dưới).
CẬP NHẬT: Tôi đã nhận ra rằng tôi đã hiểu sai. Thứ tự mới trong trường hợp này sẽ là.
| 0 | 2 | 3 | |
Kết quả là câu hỏi của tôi không thực sự hợp lý. Cảm ơn tất cả mọi người đã giúp đỡ. Tôi sẽ đánh dấu bỏ phiếu và đánh dấu một câu trả lời.
Vì vậy, câu hỏi đặt ra là làm thế nào để có được phần tử thứ hai ở đây?
CÁC CÁCH GIẢI QUYẾT HIỆN (như không có hạn như trao đổi trong sắp xếp được) dưới đây. Nó sử dụng mảng tạm thời với các đơn đặt hàng.
var prevPagesOrder = [];
$("#pages").sortable({
start: function(event, ui) {
prevPagesOrder = $(this).sortable('toArray');
},
update: function(event, ui) {
var currentOrder = $(this).sortable('toArray');
var first = ui.item[0].id;
var second = currentOrder[prevPagesOrder.indexOf(first)];
swapOnServer(first, second);
}
});
Xin cảm ơn,
Dmitriy.
@Dimitriy, không có "mục thứ hai" để nó khiến câu hỏi của bạn vô cùng không rõ ràng. Nếu bạn cho phép người dùng nhặt và thả một mục ở bất kỳ đâu trong danh sách, nó chỉ đơn thuần là chuyển các chỉ mục để nhường chỗ cho nó. Chỉ khi anh ta di chuyển nó lên một nơi lên hoặc xuống, thì chỉ có hai mục bị ảnh hưởng. Nhưng nếu anh ta lấy nó từ đầu danh sách, và thả nó sau ba mục tiếp theo, ba vị trí đầu tiên đó đều bị ảnh hưởng bởi sự di chuyển. Không có "chuyển đổi" đã xảy ra. Xin vui lòng mô tả chi tiết hơn những gì bạn cần phải hoàn thành. –
Phương thức 'swapOnServer' như thế nào? –
đã thử giải pháp, dường như dòng này: 'var second = currentOrder [prevPagesOrder.indexOf (đầu tiên)];' nên là 'var second = prevPagesOrder [currentOrder.indexOf (đầu tiên)];' –