/ / Jak sortować tablicę obiektów javascript według element.name - javascript, tablice, dom, sortowanie, prototypejs

Jak sortować tablicę obiektów javascript według element.name - javascript, tablice, dom, sortowanie, prototypejs

Próbuję napisać skrypt sprawdzania poprawności za pomocą javascript i prototypu.

Co chcę zrobić, to przejrzeć wszystkie elementy formularza i zweryfikować każdą odpowiedź. Mój kod działa, ale tablica elementów DOM jest nieposortowana. Chciałbym posortować elementy według ich identyfikatora.

Oto mój kod, który działa dobrze, jeśli komentuję 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);

}

Zastanawiam się, czy problemem może być to, że niektóre elementy nie mają nazw. Czy ktoś ma jeszcze prostszy sposób sortowania tablicy elementów DOM na podstawie .name?

Odpowiedzi:

3 dla odpowiedzi № 1

Powinno to zrobić:

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

1 dla odpowiedzi nr 2

To dlatego, że sort() nie jest metodą DomElementList odzyskujesz przy pomocy .elements.

Fajną rzeczą jest to, że możesz złożyć wniosek Array.sort metoda do twojego DomElementList przy użyciu sztuczki z Javascriptem.

Następnie wystarczy ponownie dodać węzły do ​​DOM, nie będą one duplikowane, ale przeniesione.

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 dla odpowiedzi nr 3

Implementacja bez gdyby na podstawie natywnego js sortować funkcjonować.

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