2011-11-24 15 views
13

"更新"コールバックでは、要素の順序を得ることができます$(this).sortable('toArray');jQueryのカスタムデータはソート可能ですか?

しかし、この順序には要素IDが含まれています。

data-myattrのようなカスタム属性を取得するにはどうすればよいですか?私の代わりにIDのこのattibuteからの値が含まれているため....

$('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

わかりました。コードを読んだところ、実際に実装されました!私の答えをupvoteしてください。 –

答えて

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私はあなたがこのユニットテストで見ることができるように、あなたがデータを使用することを決して決してお勧めしないことを願っています(http://jsperf.com/jquery-data-vs -jqueryselection-data/8)データが遅いです...より速い(またはもっと速いネイティブのjs)原因を使用してください。 – HellBaby

32

として、これはjQuery UIで直接実装されています:

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

これは確かに動作しています!ありがとう! – KnF

関連する問題