jQuery - método filter() para percorrer

Exemplo

Mudar a cor de todos os divs e adicionar borda à classe "middle":

$("div").css("background", "#c8ebcc")
  .filter(".middle")
  .css("cor-da-borda", "vermelho");

Experimente você mesmo

Definição e uso

O método filter() reduz o conjunto de elementos correspondentes ao conjunto de elementos que correspondem ao seletor especificado.

Sintaxe

.filter(seletor)
Parâmetros Descrição
seletor Valor de string, contendo a expressão do seletor para correspondência da coleção de elementos atual.

Explicação detalhada

Se for fornecido um objeto jQuery representando uma coleção de elementos DOM, o método .filter() constrói um novo objeto jQuery de subconjunto de elementos que correspondem ao seletor. O seletor testará cada elemento; todos os elementos que correspondem ao seletor serão incluídos no resultado.

Pense na seguinte página com uma lista simples:

<ul>
  <li>item de lista 1</li>
  <li>item de lista 2</li>
  <li>item de lista 3</li>
  <li>item de lista 4</li>
  <li>item de lista 5</li>
  <li>item de lista 6</li>
</ul>

Podemos aplicar este método ao conjunto de itens dessa lista:

$('li').filter(':even').css('background-color', 'red');

Experimente você mesmo

O resultado dessa chamada é definir o fundo dos itens 1, 3, 5 como vermelho, pois eles todos correspondem ao seletor (lembrando, :even e :odd usam índice baseado em 0).

Uso da função de filtragem

A segunda forma de usar este método é, através de uma função em vez de um seletor para filtrar elementos. Para cada elemento, se a função retornar true, o elemento será incluído no conjunto filtrado; caso contrário, será excluído.

Veja o seguinte fragmento HTML um pouco mais complexo:

<ul>
  <li><strong>lista</strong> item 1 - um tag strong</li>
  <li><strong>lista</strong> item <strong>2</strong>
   - dois <span>tags strong</span></li>
  <li>item de lista 3</li>
  <li>item de lista 4</li>
  <li>item de lista 5</li>
  <li>item de lista 6</li>
</ul>

Podemos selecionar esses itens de lista e filtrá-los com base em seu conteúdo:

$('li').filter(function(index) {
  return $('strong', this).length == 1;
}).css('background-color', 'red');