javascript - Sort(a,b) 在 Dojo.dnd.source 中不起作用

标签 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调试时,它看起来是里面的body

function( a,b ) {  
    ....
}

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

更新

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

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

更新2

改变后

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

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

Dojo 给出:

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, .....

最佳答案

排序中的回调未被调用的原因是因为您的查询选择器返回一个空数组(因此您没有任何可排序的内容)。

请使用以下内容:

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

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

关于javascript - Sort(a,b) 在 Dojo.dnd.source 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27529727/

相关文章:

javascript - Bootstrap 列没有并排出现并且宽度都相同

javascript - 从多选 jQuery UI 小部件动态添加复选框

javascript - JQuery:setInterval 不适用于each() 方法。 "this"关键字错误还是代码错误?

javascript - 如何在 Javascript 中使用 DOJO 创建静态类

Dojo 请求已经内联的 Dijit 模板 --Google Closure build

javascript - React SideEffect 脱离 useEffect 钩子(Hook)

c++ - 如何实现级联相关对象的排序比较器?

python - Python中嵌套sort(),同时进行多属性函数排序

javascript - 哪种类型的排序算法与此代码最相似? (如果有的话)。

dojo - 如何将dojo工具包与rails 3.1 Assets 管道和coffeescript一起使用?