Сброс выбранных детей для родителя - PullRequest
2 голосов
/ 19 января 2020

Я пытаюсь создать функцию, которая принимает два параметра. во-первых, это парентэлемент, а во-вторых, исключенные элементы. функция должна сбрасывать все дочерние элементы, кроме списка элементов, передаваемых во втором аргументе, которые должны быть исключены, и не должна сбрасываться. Я получил некоторый успех, используя селекторы в соответствии с методом ниже. Теперь у меня есть два запроса

function resetdetaildata(parentselector, elem) {  
        var $self = $(parentselector);
        if(elem == '')
        {
            $($self).children().find('input').val("");
            $($self).children().find('select').each(function () {
                $(this).find('option:gt(0)').remove();
                $(this).find('option:first').prop('selected', true);
            });
        }
        else
        {
            alert(parentselector);
            $($self).children('input:not(' + elem + ')').find('input').val("");
            $($self).children('select:not(' + elem + ')').find('select').each(function () {
                $(this).find('option:gt(0)').remove();
                $(this).find('option:first').prop('selected', true);
            });
        }
    }

В настоящее время я вызываю этот метод следующим образом

resetdetaildata('#Parent', '.clsmaterial');
  • Как изменить аргументы с селекторов на элементы.
  • Создание второго аргумента в виде массива и вызов его из кода

1 Ответ

1 голос
/ 19 января 2020

Вы не хотите делать вызов find после выполнения вызова children. find выглядит в элементах набора, но элементы input никогда не могут быть в других элементах input, а элементы select никогда не могут быть в других элементах select.

Отдельно, вы никогда не захотите использовать $() в наборе jQuery ($($self)).

Сначала я бы нашел все input s и selects, затем .not(), если elem является правдивым, чтобы удалить те, с которыми я не хочу совпадать.

function resetdetaildata(parentselector, elem) {  
    var $self = $(parentselector);
    // Find all inputs and selects
    var $inputs = $self.find('input');
    var $selects = $self.find('select');
    if (elem)
    {
        // We're filtering, so do that
        $inputs = $inputs.not(elem);
        $selects = $selets.not(elem);
    }
    $inputs.val("");
    $selects.each(function () {
        $(this).find('option:gt(0)').remove();
        $(this).find('option:first').prop('selected', true);
    });
}

Примечание: Вы можете сделать код, удаляющий все, кроме первый option в select sa немного проще, если использовать DOM напрямую:

function resetdetaildata(parentselector, elem) {  
    var $self = $(parentselector);
    // Find all inputs and selects
    var $inputs = $self.find('input');
    var $selects = $self.find('select');
    if (elem)
    {
        // We're filtering, so do that
        $inputs = $inputs.not(elem);
        $selects = $selets.not(elem);
    }
    $inputs.val("");
    $selects.each(function () {
        this.options.length = 1; // <== Removes all options except the first
        this.selectedIndex = 0;  // <== Selects the first option
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...