Protótipo: como construir dinamicamente selector?
-
08-07-2019 - |
Pergunta
Estou tendo um pouco de dificuldade em passar uma variável em um seletor no protótipo. Eu gostaria de ser capaz de passar uma variável na seqüência de seleção, de modo que uma função pode funcionar para muitos do mesmo tipo.
No momento, este é o que eu basicamente como fazer:
function myFunct(var)
{
$(var + 'add_form').hide() //so inde the brackets would be ('#product1 #add_form') for example.
}
Seja capaz de passar 'var' para a função que iria passá-lo para o seletor, para que eu possa esconder um padrão que é o mesmo para muitos na página.
Todas as idéias para um caminho a seguir seria muito apreciada.
Solução
Você está no caminho certo! Algumas coisas:
-
var
é uma palavra-chave JavaScript ( fonte ), não usá-lo para nomear uma variável - se você está consultando um elemento por id (como
#add_form
) você não precisa adicionar nenhum elemento de recipiente, como você está fazendo - Se você está consultando um elemento por
class
, você precisa usar a função$$
, não a função$
- Você precisa iterar sobre o conjunto embrulhado para chamar seu método
-
espaço em branco é significativo em seletores css, então certifique-se de incluir aqueles em sua construção seletor para dizer Protótipo de pesquisa em seu recipiente pai:
function myFunct(parent) { $$(parent + ' .add_form').invoke('hide') } myFunct('#someparent'); // hides .add_form inside #someparent
Outras dicas
Isso deve funcionar ... var
apenas de mudança de nome para outra coisa.
function myFunct(yourVar)
{
$$('#' + yourVar + ' .add_form').each(function(s){ s.hide(); }); // yourVar being the id of the container element
}
Eu coloquei um '' na frente de add_form porque você não pode usar vários elementos com o mesmo ID, torná-lo uma classe.