Преобразуйте массив Javascript обратно в объект типа JQuery - PullRequest
0 голосов
/ 10 октября 2019

В приведенном ниже коде я хотел, чтобы функция _formsOk работала как для массивов Javascript, так и для "объектов JQuery". В function1 () я попытался создать массив Javascript со всеми элементами DOM, кроме тех, которые имеют родительский элемент с id = "objectTypesContainer". По сути, function1 () отфильтровывает элементы DOM, которые мне не нужны, прежде чем вызывать функцию _formsOk (), которая выполняет фактическую проверку формы.

function1() {
    var allForms = $('form:not(.vv_hidden)', this.selectMarketsContainer);
    var nonObjectTypeForms = [];
        allForms.each(function () {
            if ($(this).parent().attr("id") !== "objectTypesContainer"){
                nonObjectTypeForms.push($(this)[0]);
            }
        });

        return this._formsOk(nonObjectTypeForms);
},

_formsOk: function($forms) {
        var formOk = true;
        console.log(typeof $forms)
        $forms.each(function () {  // This line fails
            var validator = $(this).validate(DEFAULT_VALIDATION_OPTIONS);
            if (!(validator && validator.form())) {
                formOk = false;
            }
        });
        return formOk;
},

Однако я понял, что теперь nonObjectTypeForms является массивом JSвместо «JQuery Object» строка, помеченная (// эта строка не работает), теперь не работает.

Исходный код выглядел следующим образом:

function1() {
    var allForms = $('form:not(.vv_hidden)', this.selectMarketsContainer);  // This is a "JQuery object", so no error occurs
    return this._formsOk(allForms);
},

_formsOk: function($forms) {
        var formOk = true;
        console.log(typeof $forms)
        $forms.each(function () {  // This line fails
            var validator = $(this).validate(DEFAULT_VALIDATION_OPTIONS);
            if (!(validator && validator.form())) {
                formOk = false;
            }
        });
        return formOk;
},

Есть ли способ, которым я могу преобразоватьмассив JS в объект JQuery? Я пока не хочу менять определение функции _formsOk.

1 Ответ

2 голосов
/ 10 октября 2019

Вместо помещения всех элементов в новый массив, просто используйте .filter() из объекта jQuery.

allForms.filter(function () {
   return $(this).parent().attr("id") !== "objectTypesContainer")
});

Это удалит все ненужные элементы вваш выбор и теперь allForms будет иметь только нужные элементы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...