2009-09-14 6 views
3

Я пытаюсь написать некоторый скрипт проверки, используя javascript и прототип.Как отсортировать массив объектов javascript по элементу.name

Что я хочу сделать, это перебрать все элементы формы и подтвердить каждый ответ. Мой код работает, НО массив элементов 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 по их имени?

ответ

3

Это следует сделать это:

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

Спасибо, это работает отлично вар элем = $$ ('# Myform * [имя]') SortBy (функция (эл) {возвращение el.name;}). –

1

Это потому, что 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]); 
} 
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

Смежные вопросы