我尝试在用户删除目标容器上的元素后对数据进行排序,这是排序事件
......
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();
});
});
我改变后
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
node: div#elements_container.container.dnd-list.dojoDndContainer.dojoDndSource.dojoDndTarget
childrenNodes: NodeList[div#dojoUnique23.element.dojoDndItem, div#dojoUnique24.element.dojoDndItem, .....
答案 0 :(得分:1)
未调用sort中的回调的原因是因为查询选择器返回一个空数组(因此您无需排序)。
请改用以下内容:
dojo.query(".element.dojoDndItem", "elements_container").sort(
请注意,最初您的选择器是“.element .dojoDndItem”,这意味着“查找具有类dojoDndItem的所有节点,这些节点是具有类元素的节点的子节点”。这里,两个类都在相同的节点中,因此您需要删除空格并使选择器为“.element.dojoDndItem”。