Проблема, с которой вы столкнулись, в основном потому, что nodeName
обычно возвращает прописные буквы текст (в зависимости от браузера), и вы сравниваете его со строчными буквами fieldset
. Чтобы сделать это согласованным, вы должны использовать строковую функцию toLowerCase
.
Об условных обозначениях: я думаю, что более элегантный способ - создать новый массив filtered
без <fieldset>
и кнопку подтверждения.
Наконец, то, как вы создаете свои массивы, включает в себя слишком много печатания.
Я предлагаю вам использовать буквенную запись для создания Arrays
и Objects
.
[ Демо ] ( просмотр клика )
function $(id) { return document.getElementById(id); }
var filtered = [];
var elements = $("myForm").elements;
var len = elements.length;
// opt out fieldsets and submit buttons
for (var i = 0; i < len; i++) {
var el = elements[i];
if (el.nodeName.toLowerCase() != "fieldset" && el.type != "submit") {
filtered.push(el);
}
}
// specify an order (of indices)
var user = [1, 3, 5, 2, 4, 6];
// then replace numbers with element
// values from the filtered array
for (var i = 0; i < user.length; i++) {
user[i] = filtered[ user[i] ].value;
}