Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery中的自定义数据是否可排序?_Javascript_Jquery_Jquery Ui Sortable - Fatal编程技术网

Javascript jQuery中的自定义数据是否可排序?

Javascript jQuery中的自定义数据是否可排序?,javascript,jquery,jquery-ui-sortable,Javascript,Jquery,Jquery Ui Sortable,在“update”回调中,您可以使用$(this.sortable('toArray')获得元素的顺序 但是这个顺序包含元素ID 如何获取自定义属性,如data myattr?我希望该顺序包含来自此attibute的值,而不是ID $('ul').sortable({ handle: 'h2' items: 'li', context: this, update: function(){ var order = $(t

在“update”回调中,您可以使用
$(this.sortable('toArray')获得元素的顺序

但是这个顺序包含元素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>
  ...
  • ...
  • ...
JS小提琴

$(“ul”)。可排序({
.
.
.
更新:函数(事件,ui){
var arr=$(this.sortable('toArray');
变量i,n;
var attrs=[];
对于(i=0,n=arr.length;i
从2012年8月起,这将直接在jQuery UI中实现:

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

我想我的JSBin脚本中有一个虚拟元素——我已经删除了它。唯一的缺点是,如果元素上没有ID属性,那么这将不起作用:)这可能是一个jQuery UI功能请求……好吧,我阅读了代码,现在它实际上已经实现了!请把我下面的答案投上一票。@Alper我真的希望你永远不要再推荐
data
使用。。。正如您在这个单元测试()中看到的,数据速度很慢……使用prop,因为它更快(或者使用更快的原生js)。这是正确的答案。
$("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);  
  }
});
var order = $(this).sortable('toArray', {attribute: 'data-myattr'});