在javascript中对节点列表重新排序

在javascript中对节点列表重新排序,javascript,xml,sorting,Javascript,Xml,Sorting,我想按VM field Name属性对节点列表进行排序。 xml: ttttt AAAA bbbbb fffff ccccc RRR DDD eeeee 我写了下面的代码: var x=xmlDoc.getElementsByTagName("VM"); var ax = Array.prototype.slice.call(x, 0); for (var i=0; i<ax.length; i++) { ax.sort(function(a, b){ var

我想按VM field Name属性对节点列表进行排序。 xml:


ttttt
AAAA
bbbbb
fffff
ccccc
RRR
DDD
eeeee
我写了下面的代码:

var x=xmlDoc.getElementsByTagName("VM");        
var ax = Array.prototype.slice.call(x, 0);

for (var i=0; i<ax.length; i++) {
ax.sort(function(a, b){
    var a = ax[i].getAttribute('Name');
    var b = ax[i].getAttribute('Name');
    if(a < b) return -1;
    if(a > b) return 1;
    return 0;
    });
}

for (i=0; i<ax.length; i++) {
    document.write(ax[i].getAttribute('Name') + "<br/>");
}
var x=xmlDoc.getElementsByTagName(“VM”); var ax=Array.prototype.slice.call(x,0); 对于(VarI=0;IB)返回1; 返回0; }); } 对于(i=0;i

这是为您修复的排序功能

var x=xmlDoc.getElementsByTagName("HBR")[0].getElementsByTagName("VM");        
var ax = Array.prototype.slice.call(x, 0);

for (var i=0; i<ax.length; i++) {
ax.sort(function(a, b){
    a = a.getAttribute('Name');
    b = b.getAttribute('Name');

    if(a < b) return -1;
    if(a > b) return 1;
    return 0;
    });
}
var x=xmlDoc.getElementsByTagName(“HBR”)[0].getElementsByTagName(“VM”); var ax=Array.prototype.slice.call(x,0); 对于(VarI=0;IB)返回1; 返回0; }); }
不要使用
文档。编写
,它来自一个古老的JavaScript版本,不再使用。如果要将节点添加到活动文档中,请使用DOM操纵函数,如等

您还多次调用ax.sort(或者更确切地说,对数组中的每个元素调用一次)。这不是使用sort的方式,所以只需将其转换为一行,并依赖于sort输入,而不要接触数组

重写代码:

ax = ax.sort(function(a,b) {
  a = a.getAttribute("Name");
  b = b.getAttribute("Name");
  return a < b ? -1 : b < a ? 1 : 0; });
});

您可以将字符串与<和>进行比较,这很好,它根据标准字符串比较规则执行正确的操作。@Mike'Pomax'Kamermans感谢您的提示。正在更新我的答案。虽然这仍然依赖于parseInt,但这里根本不需要它=)
ax = ax.sort(function(a,b) {
  a = a.getAttribute("Name");
  b = b.getAttribute("Name");
  return a < b ? -1 : b < a ? 1 : 0; });
});
ax.forEach(function(node) {
  document.body.appendChild(node);
});