jQuery iteração - método .is()
Exemplo
Retorna false, pois o pai do elemento input é o elemento p:
var isFormParent = $("input[type='checkbox']").parent();.is("form"); $("div").text("isFormParent = " + isFormParent);
Definição e uso
O método .is() detecta conjuntos de elementos com base em seletores, elementos ou objetos jQuery, e retorna true se pelo menos um dos elementos coincidir com os parâmetros fornecidos.
Sintaxe
.is(seletor)
Parâmetros | Descrição |
---|---|
seletor | Valor de string, contendo a expressão de seletor que coincide com os elementos. |
Explicação detalhada
Diferente de outros métodos de filtragem, .is() não cria um novo objeto jQuery. Em vez disso, permite que façamos a detecção do objeto jQuery sem modificar o conteúdo do objeto jQuery. Isso é útil dentro de callbacks, como manipuladores de eventos.
Suponha que tenhamos uma lista onde dois itens contêm elementos filhos:
<ul> <li>list <strong>item 1</strong></li> <li><span>item da lista 2</span></li> <li>item da lista 3</li> </ul>
Você pode adicionar um manipulador de clique ao elemento <ul> e limitar o código para que ele seja acionado apenas quando o item da lista em si, e não seus elementos filhos, for clicado:
$("ul").click(function(event) { var $target = $(event.target); if ( $target.is("li") ) { $target.css("background-color", "red"); } );
Agora, quando o usuário clicar na palavra "list" do primeiro item da lista ou em qualquer palavra do terceiro item da lista, o item clicado será configurado com fundo vermelho. No entanto, quando o usuário clicar em "item 1" do primeiro item ou em qualquer palavra do segundo item, não haverá nenhuma mudança, pois nos casos acima, o alvo do evento é <strong>é <span>.
Por favor, note que para expressões de seletores posicional, como :first, :gt() ou :even, a filtragem posicional é feita para o objeto jQuery passado para .is(), e não para o documento contido. Portanto, para o HTML acima, expressões como $("li:first").is("li:last") retornam true, mas $("li:first-child").is("li:last-child") retorna false.
Usando função
A segunda forma de uso deste método é avaliar expressões de elementos relacionados com base em funções, em vez de seletores. Para cada elemento, se a função retornar true, .is() também retornará true. Por exemplo, aqui está um fragmento HTML 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 da lista 3</li> <li>item da lista 4</li> <li>item da lista 5</li> </ul>
Você pode adicionar um manipulador de clique a cada <li> para calcular o número de elementos <strong>internos ao <li> clicado:
$("li").click(function() { var $li = $(this), isWithTwo = $li.is(function() { return $('strong', this).length === 2; });; if ( isWithTwo ) { $li.css("background-color", "green"); } else { $li.css("background-color", "red"); } );