Я полагаю, у вас есть ошибка в описании проблемы, так как тег всегда содержит текст в примере.
Насколько я знаю, нет стандартного селектора, позволяющего проверить наличие прямого контента, но вы можете попробовать это:
$('p').each(function(){
var p = $(this).clone();
p.children().remove();
if(p.text().length){
$(this).addClass('gotcha');
}
});
Должно работать, если вы хотите проверить только абзацы внутри.