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 № 1Powinno 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; })