我尝试使用javascript和prototype编写一些验证脚本。
我想要做的是遍历表单的所有元素并验证每个答案。我的代码有效,但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元素数组答案 0 :(得分:3)
这应该这样做:
$$('#myForm *[name]').sortBy(function(el){ return el.name; });
答案 1 :(得分: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]);
}
答案 2 :(得分:1)
在没有 if 的情况下基于原生js sort函数实现。
elements.sort(function(a, b) { return 2 * (a.name > b.name) - 1; })