Respostas:
Usando um seletor css normal:
$('.sys input[type=text], .sys select').each(function() {...})
Se você não gosta da repetição:
$('.sys').find('input[type=text],select').each(function() {...})
Ou, de forma mais concisa, passe o context
argumento:
$('input[type=text],select', '.sys').each(function() {...})
Nota: Internamente jQuery
irá converter o acima em find()
equivalente
Internamente, o contexto do seletor é implementado com o método .find (), então $ ('span', this) é equivalente a $ (this) .find ('span').
Eu pessoalmente acho que a primeira alternativa é a mais legível :), mas sua opinião
$
chamada é tão importante para o seu aplicativo, evite usar jQuery completamente :). Essa resposta tentou responder à pergunta de OP, se fosse uma questão de desempenho, essa resposta não estaria aqui em primeiro lugar. De qualquer forma, obrigado pelo comentário :), obrigado
$
chamada, mas sobre todas as $
chamadas presentes em um aplicativo. IMO, quando você tem maneiras diferentes de fazer a mesma coisa, procuro sempre escolher aquela que funciona melhor bc. slow performance
=== unhappy users
. Além disso, podemos tanto responder à pergunta de um OP com respostas múltiplas (como fez) e vantagens proporcionadas / inconveniente de cada um deles (como eu fiz no comentário). IMO, é importante notar porque todas as respostas são diferentes, fornecendo o mesmo resultado. Além disso, podemos escrever código JavaScript vanilla com desempenho lento JavaScript
performance
$
, classifique seus divs especificamente e use document.getElemenById/ElementsByClassName
, em vez de passar pelo $
que faz muitas verificações / análise de string de seu seletor, jQuery não é famoso para sua biblioteca de desempenho. E eu, honestamente, não vi um app ficar lento por ter ligado $
demais, se você tiver um site com esse problema, por favor, me mostre, estou muito interessado :)
$('.sys').children('input[type=text], select').each(function () { ... });
EDIT: Na verdade, este código acima é equivalente ao seletor de filhos, .sys > input[type=text]
se você quiser o select ( .sys input[type=text]
) descendente, você precisa usar as opções fornecidas por @NiftyDude.
Mais Informações:
chilren
vez dechildren
Se você tiver várias entradas como texto em um formulário ou tabela que precise iterar, eu fiz o seguinte:
var $list = $("#tableOrForm :input[type='text']");
$list.each(function(){
// Go on with your code.
});
O que eu fiz foi verificar cada entrada para ver se o tipo está definido como "texto", então ele pegará esse elemento e o armazenará na lista jQuery. Em seguida, iteraria essa lista. Você pode definir uma variável temporária para a iteração atual assim:
var $currentItem = $(this);
Isso definirá o item atual para a iteração atual de cada loop. Então você pode fazer o que quiser com a variável temp.
Espero que isso ajude alguém!
$('input[type=text],select', '.sys');
para loop:
$('input[type=text],select', '.sys').each(function() {
// code
});
context form
está usando ofind form
, ofind form
é mais eficiente do que ocontext form
(uma função de chamada evitada). Isso é válido para quase todos os seletores usados. Então, IMO ofind form
é mais eficiente do que onormal CSS selector
, porque ambas as partes do seletor são relativas ao nó raiz, onde nofind form
, apenas a.sys
parte é relativa a ele, entãoinput[type=text],select
é executado em um conjunto muito menor de elementos, então pode ser mais rápido (mas precisa ser verificado por testes)