2011-11-24 43 views
13

trên gọi lại "cập nhật", bạn có thể nhận được thứ tự các thành phần với $(this).sortable('toArray');Dữ liệu tùy chỉnh trong jQuery có thể sắp xếp?

Nhưng đơn đặt hàng này chứa ID phần tử.

Làm cách nào để có được thuộc tính tùy chỉnh, như data-myattr? Tôi muốn điều đó để chứa các giá trị từ attibute này thay vì ID ....

$('ul').sortable({ 
    handle: 'h2' 
    items: 'li', 
    context: this, 
    update: function(){   

     var order = $(this).sortable('toArray'); 

     // here I want a array of values from my attribute, not ID values... 
     alert(order); 

     .... 

    } 
    }); 

HTML rất đơn giản:

<ul> 
    <li data-myattr="a-1" id="whatever"> 
    ... 
    </li> 
    ... 
+0

Điều này có thể là yêu cầu tính năng giao diện người dùng jQuery ... –

+0

Ok, tôi đã đọc mã và nó thực sự được triển khai ngay bây giờ! Xin vui lòng upvote câu trả lời của tôi dưới đây. –

Trả lời

3
$("ul").sortable({ 
    . 
    . 
    . 
    update: function(event, ui) {   
    var arr = $(this).sortable('toArray'); 
    var i, n; 
    var attrs = []; 
    for (i = 0, n = arr.length; i < n; i++) { 
     attrs.push($('#' + arr[i]).data('myattr')); 
    } 

    alert(attrs); 
    } 
}); 
+1

cảm ơn nó hoạt động, nhưng tại sao arr.length - 1? Tôi cũng cần phần tử cuối cùng đó :) – Alex

+0

Tôi nghĩ mình có phần tử giả trong kịch bản JSBin của mình - tôi đã xóa nó. –

+1

nhược điểm duy nhất là nếu bạn không có thuộc tính ID trên các yếu tố này sẽ không hoạt động :) – KnF

0
$("li").data("myattr") // if you use jQuery, >= 1.4.3 

$("li").attr("data-myattr") // for erlier 

JS Fiddle here

+1

không rly liên quan đến những gì tôi hỏi :) – Alex

+1

@Alper Tôi thực sự hy vọng bạn sẽ không bao giờ đề nghị 'dữ liệu' sử dụng anylonger ... như bạn có thể thấy trên bài kiểm tra đơn vị này (http://jsperf.com/jquery-data-vs -jqueryselection-data/8) dữ liệu là chậm ... sử dụng prop gây ra nó nhanh hơn (hoặc js bản địa mà thậm chí còn nhanh hơn). – HellBaby

32

Như của tháng 8 '12, điều này được triển khai trực tiếp trong giao diện người dùng jQuery:

var order = $(this).sortable('toArray', {attribute: 'data-myattr'}); 
+0

điều này thực sự là làm việc !! Cảm ơn! – KnF

Các vấn đề liên quan