2009-09-14 137 views
3

我尝试使用JavaScript和原型编写一些验证脚本。如何通过element.name对javascript对象数组进行排序

我想要做的是循环遍历表单的所有元素并验证每个答案。我的代码工作,但DOM元素的数组是未排序的。我想通过他们的ID对元素进行排序。

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

function zelementsort(a,b) { 
    if (a.name > b.name) 
     return -1; 
    else if (b.name > a.name) 
     return 1; 
    else 
     return 0; 
} 

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

for(var i = 0; i < elem.length; i++) 
{ 
    alert("Name = " + elem[i].name); 

} 

我不知道问题可能是某些元素没有名称。任何人都有另一种更简单的方法,通过他们的.name排序DOM元素数组?

回答

3

这应做到:

$$('#myForm *[name]').sortBy(function(el){ return el.name; }); 
+0

谢谢,这完美地工作 变种ELEM = $$( '#myForm的* [名称]')sortBy(函数(EL){返回el.name;})。 – 2009-09-16 17:50:15

1

这是因为sort()不是的DomElementList.elements检索方法。

好的是,您可以使用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]); 
} 
1

没有实现,如果基于原生JS sort功能。

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

太棒了,它真的很好! 谢谢你的解决方案!降序:'elements.sort(function(a,b){return 2 *(a.name 2015-05-05 17:44:43

相关问题