Как отсортировать массив объектов javascript по element.name - PullRequest
3 голосов
/ 15 сентября 2009

Я пытаюсь написать сценарий проверки с использованием javascript и прототипа.

Что я хочу сделать, так это пройтись по всем элементам формы и проверить каждый ответ. Мой код работает, НО массив элементов DOM не отсортирован. Я хотел бы отсортировать элементы по их идентификатору.

Вот мой код, который отлично работает, если я закомментирую 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);

}

Интересно, может быть проблема в том, что некоторые элементы не имеют имен. У кого-нибудь есть еще один простой способ сортировки массива элементов DOM по имени .name?

Ответы [ 3 ]

3 голосов
/ 15 сентября 2009

Это должно сделать это:

$$('#myForm *[name]').sortBy(function(el){ return el.name; });
1 голос
/ 28 октября 2013

Реализация без , если на основе нативной функции js sort .

elements.sort(function(a, b) { return 2 * (a.name > b.name) - 1; })
1 голос
/ 06 ноября 2009

Это потому, что sort() не является методом DomElementList, который вы получаете с помощью .elements.

Приятно то, что вы можете применить метод Array.sort к вашему DomElementList, используя трюк 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]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...