Прототип: как динамически построить селектор?

StackOverflow https://stackoverflow.com/questions/1817444

  •  08-07-2019
  •  | 
  •  

Вопрос

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

На данный момент это то, что я хотел бы сделать в основном:

function myFunct(var)
{
  $(var + 'add_form').hide()  //so inde the brackets would be ('#product1 #add_form') for example.
}

Уметь передавать 'var' в функцию, которая передаст его селектору, чтобы я мог скрыть шаблон, который одинаков для многих на странице.

Будем весьма благодарны за любые идеи, по которым нужно следовать.

Это было полезно?

Решение

Вы на правильном пути! Пара вещей:

<Ол>
  • var - это ключевое слово JavaScript ( источник ) , не используйте его для именования переменных
  • если вы запрашиваете элемент по идентификатору (например, #add_form ), вам не нужно добавлять какой-либо элемент контейнера, как вы это делаете
  • Если вы запрашиваете элемент по class , вам нужно использовать функцию $$ , а не функцию $
  • Вам нужно перебрать упакованный набор, чтобы вызвать ваш метод
  • пробелы важны в селекторах css, поэтому обязательно включите их в конструкцию селектора, чтобы Prototype выполнял поиск в вашего родительского контейнера:

    function myFunct(parent) {
      $(parent + ' .add_form').invoke('hide')
    }
    
    myFunct('#someparent'); // hides .add_form inside #someparent
    
  • Другие советы

    Это должно сработать ... просто переименуйте var во что-то другое.

    function myFunct(yourVar)
    {
    
      $('#' + yourVar + ' .add_form').each(function(s){ s.hide(); });  // yourVar being the id of the container element
    
    }
    

    Я поставил «.» перед add_form, потому что вы не можете использовать несколько элементов с одинаковым идентификатором, сделайте его классом.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top