Dom7 — это легковесная библиотека для работы с DOM, предоставляющая удобный синтаксис, аналогичный jQuery. Одной из ключевых задач при работе с веб-формами является получение данных, введённых пользователем. Dom7 упрощает этот процесс, позволяя быстро извлекать значения полей формы, управлять событиями и работать с группами элементов.
Для начала необходимо выбрать форму или её поля с помощью селекторов Dom7. Синтаксис аналогичен CSS:
import Dom7 from 'dom7';
const form = Dom7('form#myForm'); // выбор всей формы
const inputs = Dom7('input[name]'); // выбор всех input с атрибутом name
const textareas = Dom7('textarea'); // выбор всех textarea
const selects = Dom7('select'); // выбор всех select
Особенности:
Dom7(selector) возвращает коллекцию элементов,
даже если найден один.inputs[0].Для извлечения значения отдельного элемента используется свойство
value. В Dom7 доступ к нему можно получить напрямую через
ссылку на элемент:
const firstName = inputs[0].value; // значение первого input
const message = textareas[0].value; // значение textarea
const selectedOption = selects[0].value; // выбранное значение select
Для проверки состояния чекбоксов и радио-кнопок используется свойство
checked:
const agreeChecked = Dom7('input#agree')[0].checked;
Dom7 позволяет собрать все данные формы в объект с помощью перебора элементов:
const formData = {};
Dom7('form#myForm input, form#myForm textarea, form#myForm select').each((el) => {
const name = el.name;
if (!name) return; // пропуск элементов без атрибута name
if (el.type === 'checkbox') {
formData[name] = el.checked;
} else if (el.type === 'radio') {
if (el.checked) formData[name] = el.value;
} else {
formData[name] = el.value;
}
});
Особенности:
each перебирает каждый элемент коллекции
Dom7.checked.name атрибут является ключом для объекта данных.Для динамического получения данных формы часто используется событие
submit. Dom7 упрощает его обработку:
Dom7('form#myForm').on('submit', function (event) {
event.preventDefault(); // предотвращение стандартной отправки
const formData = {};
Dom7(this).find('input, textarea, select').each((el) => {
const name = el.name;
if (!name) return;
if (el.type === 'checkbox') {
formData[name] = el.checked;
} else if (el.type === 'radio') {
if (el.checked) formData[name] = el.value;
} else {
formData[name] = el.value;
}
});
console.log(formData); // доступ к собранным данным
});
Особенности использования:
Dom7(this) позволяет работать с формой, на которой
произошло событие.find возвращает вложенные элементы формы.submit требует вызова
preventDefault() для предотвращения перезагрузки
страницы.serializeArray через Dom7Dom7 не имеет встроенного метода serializeArray, как
jQuery, но можно создать эквивалент:
function serializeForm(form) {
const data = [];
Dom7(form).find('input, textarea, select').each((el) => {
if (!el.name) return;
if ((el.type === 'checkbox' || el.type === 'radio') && !el.checked) return;
data.push({ name: el.name, value: el.value });
});
return data;
}
const serialized = serializeForm(Dom7('form#myForm')[0]);
console.log(serialized);
Особенности:
{name, value} для удобной
передачи данных через AJAX.При динамическом добавлении полей после загрузки страницы Dom7 сохраняет возможность их выбора и обработки:
Dom7(document).on('submit', 'form#dynamicForm', function(event) {
event.preventDefault();
const formData = {};
Dom7(this).find('input, textarea, select').each(el => {
if (!el.name) return;
formData[el.name] = el.type === 'checkbox' ? el.checked : el.value;
});
console.log(formData);
});
Особенности:
document обеспечивает
работу с динамически добавленными формами.Использование Dom7 для работы с формами позволяет:
Dom7 сочетает лёгкость и гибкость, делая работу с формами в JavaScript удобной и эффективной.