代码之家  ›  专栏  ›  技术社区  ›  jeph perro

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

  •  3
  • jeph perro  · 技术社区  · 15 年前

    我尝试使用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 回复  |  直到 9 年前
        1
  •  3
  •   kangax    15 年前

    应该这样做:

    $$('#myForm *[name]').sortBy(function(el){ return el.name; });
    
        2
  •  1
  •   Vincent Robert    15 年前

    这是因为 sort() 不是 DomElementList 你可以用 .elements .

    好的是你可以申请 Array.sort 你的方法 列表列表 使用javascript技巧。

    然后,您只需要在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]);
    }
    
        3
  •  1
  •   user854301    11 年前

    在没有 如果 基于本地JS sort 功能。

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