如何按element.name对javascript对象数组排序

如何按element.name对javascript对象数组排序,javascript,arrays,dom,sorting,prototypejs,Javascript,Arrays,Dom,Sorting,Prototypejs,我正在尝试使用javascript和prototype编写一些验证脚本 我想做的是遍历表单的所有元素并验证每个答案。我的代码可以工作,但是DOM元素的数组是未排序的。我想按元素的ID对元素进行排序 这是我的代码,如果我注释掉elem.sort(zelementsort),它可以正常工作 功能zelementsort(a,b){ 如果(a.name>b.name) 返回-1; else if(b.name>a.name) 返回1; 其他的 返回0; } var elem=document.g

我正在尝试使用javascript和prototype编写一些验证脚本

我想做的是遍历表单的所有元素并验证每个答案。我的代码可以工作,但是DOM元素的数组是未排序的。我想按元素的ID对元素进行排序

这是我的代码,如果我注释掉elem.sort(zelementsort),它可以正常工作

功能zelementsort(a,b){
如果(a.name>b.name)
返回-1;
else if(b.name>a.name)
返回1;
其他的
返回0;
}   
var elem=document.getElementById('myform').elements;
元素排序(zelementsort);
对于(变量i=0;i
我想知道问题是否在于某些元素没有名称。任何人都可以用另一种更简单的方法按DOM元素的.name对数组进行排序?

这应该可以做到:

$$('#myForm *[name]').sortBy(function(el){ return el.name; });
这是因为
sort()
不是使用
.elements
检索的
DomElementList
方法

很好的一点是,您可以使用Javascript技巧将
Array.sort
方法应用于
DomElementList

然后,您只需在DOM中再次附加节点,它们不会被复制,而是被移动

var myform = document.getElementById('myform'),
    elem = myform.elements;

// call the Array.sort() method on our DomElementList
Array.prototype.sort.call(elem, function()
{
    if (a.name > b.name)
        return -1;
    else if (b.name > a.name)
        return 1;
    else 
        return 0;
});

for(var i = 0; i < elem.length; i++)
{
     myform.appendChild(elem[i]);
}
var myform=document.getElementById('myform'),
elem=myform.elements;
//在我们的DomElementList上调用Array.sort()方法
Array.prototype.sort.call(elem,function()
{
如果(a.name>b.name)
返回-1;
else if(b.name>a.name)
返回1;
其他的
返回0;
});
对于(变量i=0;i
基于本机js函数的不带if的实现

elements.sort(function(a, b) { return 2 * (a.name > b.name) - 1; })

谢谢,这在var elem=$$('#myForm*[name]')中非常有效;太好了,效果很好!谢谢你的解决方案!降序:
elements.sort(函数(a,b){return2*(a.name
elements.sort(function(a, b) { return 2 * (a.name > b.name) - 1; })