排序(a,b)在Dojo.dnd.source中不起作用

时间:2014-12-17 16:02:04

标签: javascript sorting dojo

我尝试在用户删除目标容器上的元素后对数据进行排序,这是排序事件

......
var elements_container= dojo.dnd.Source("elements_container");
dojo.byId("elements_container").innerHTML = '';

... // add elements into container...

function sortDnD(){
    // actually full class name is ".element dojoDndItem" to query
    dojo.query(".element",  dojo.byId("elements_container")).sort(
        function( a,b ) {  
            // fire bug debugging cursor skip this section
            var divs_a = dojo.query('> div.sequence', a)
            var diValue_a = divs_a[0].innerHTML;
            var divs_b = dojo.query('> div.sequence', b)
            var diValue_b = divs_b[0].innerHTML;
                return (divs_a == divs_b ? 0 : (a.divs_a > b.divs_b ? 1 : -1));
        }
    ).forEach(// fire bug debugging cursor move to this section
        function(a, idx) { 
            dojo.byId("element_container").insertBefore(a, dojo.byId("elements_container").childNodes[idx]);  
    });
}

dojo.byId(“elements_container”)是dojo dnd源。我可以保证容器中有几个元素......

我正在使用dojo1.6,有趣的是当我通过firebug进行调试时,它看起来是

内部的主体
function( a,b ) {  
    ....
}

从未执行过,也没有收到任何错误消息;调试光标在.forEach之后移动到function( a,b ),但.forEach方法的主体运行没有任何问题。看起来排序函数完全没有响应。

更新

这里是调用上面排序函数的代码

dojo.connect( source_container, "onDndDrop", function( source, nodes, copy, target ) {
    nodes.forEach(function(node) {
         sortDnD();
    });
});

UPDATE2

我改变后

dojo.query(".element",  dojo.byId("elements_container")).sort(

dojo.query(".element",  elements_container).sort(

道场给出:

TypeError: root.getElementsByClassName is not a function
...ag){var ret=_201(0,arr),te,x=0;var tret=root.getElementsByClassName(_235);while(...

这是elements_container

的dom数据
node: div#elements_container.container.dnd-list.dojoDndContainer.dojoDndSource.dojoDndTarget
childrenNodes: NodeList[div#dojoUnique23.element.dojoDndItem, div#dojoUnique24.element.dojoDndItem, .....

1 个答案:

答案 0 :(得分:1)

未调用sort中的回调的原因是因为查询选择器返回一个空数组(因此您无需排序)。

请改用以下内容:

dojo.query(".element.dojoDndItem", "elements_container").sort(

请注意,最初您的选择器是“.element .dojoDndItem”,这意味着“查找具有类dojoDndItem的所有节点,这些节点是具有类元素的节点的子节点”。这里,两个类都在相同的节点中,因此您需要删除空格并使选择器为“.element.dojoDndItem”。