2009-09-14 208 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

相關問題