Encontre se o elemento contém x, mas não y (jQuery)
Pergunta
<div>
<p><a href="#">link</a> some text</p>
<p><a href="#">link</a></p>
<p><a href="#">link</a> some text</p>
<p><a href="#">link</a></p>
</div>
Eu quero encontrar (e addclass para) o <p>
Tags que não contêm texto, diretamente dentro de si ou de seus filhos.
Solução
Isso funciona bem, eu tive que esvaziar o texto de um de seus parágrafos para testar:
var $eles = $('p').filter(function() {
return $(this).text().length == 0;
});
$eles.addClass("foo");
Outras dicas
Suponho que você tenha um erro na descrição do problema, pois a tag A sempre contém texto no exemplo.
Até onde eu sei, não há seletor padrão, permitindo verificar se há um conteúdo direto, mas você pode tentar o seguinte:
$('p').each(function(){
var p = $(this).clone();
p.children().remove();
if(p.text().length){
$(this).addClass('gotcha');
}
});
Deve funcionar se você deseja verificar apenas o interior do parágrafo.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow