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 contextargumento:
$('input[type=text],select', '.sys').each(function() {...})
Nota: Internamente jQueryirá 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 JavaScriptperformance
$, 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:
chilrenvez 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 formestá 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.sysparte é 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)