2011-11-24 37 views
13

關於「更新」回調你可以得到元素的順序$(this).sortable('toArray');jQuery中的自定義數據可排序?

但是這個順序包含元素ID。

如何獲得自定義屬性,如data-myattr?我想是爲了牽制從這個attibute代替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很簡單:

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

這應該可能是一個jQuery UI功能請求... –

+0

好吧,我讀了代碼,它現在實際上實現了!請在下面加註我的答案。 –

回答

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

謝謝它的作品,但爲什麼arr.length - 1?我需要最後一個元素:) – Alex

+0

我想我的JSBin腳本中有一個虛擬元素 - 我已經刪除它了。 –

+1

唯一的缺點是,如果你沒有元素的ID屬性,這將無法正常工作:) – KnF

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

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

JS小提琴here

+1

與我所問的不相關:) – Alex

+1

@Alper我真的希望你永遠不會推薦'data'使用anylonger ...正如你可以在這個單元測試中看到的一樣(http://jsperf.com/jquery-data-vs -jqueryselection-data/8)data is slow ...使用prop會導致速度更快(或者原生js更快)。 – HellBaby

32

由於12月8日,這是直接在jQuery UI中實現的:

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

這確實工作!謝謝! – KnF