JSFiddle - React, Tailwind, and code Playground
HTML
<div class="box" data-id="1">Primeiro texto</div>
<div class="box" data-id="2">Segundo texto <a class="link">Clique aqui</a>
</div>
<div class="box" data-id="3">
<a class="link">Clique aqui</a>
</div>
<div class="box" data-id="4">Testando</div>
JavaScript
function temSoClasse(elInicial, seletor) {
var soLink = $(elInicial).filter(function () {
var hasLink = false;
var nodes = $(this.childNodes).filter(function (i, el) {
if (el.nodeType == 1) {
if ($(el).parent().find(seletor).length) hasLink = true;
return true;
}
return el.textContent.trim().length;
});
return nodes.length == 1 && hasLink;
});
return soLink;
}
function temSoClasse2(elInicial, seletor) {
var soLink = $(elInicial).filter(function () {
//var hasLink = false;
return $(this).find(seletor).length > 0 && $(this.childNodes).filter(function (i, el) {
/*if (el.nodeType == 1) {
if ($(el).parent().find(seletor).length) hasLink = true;
return true;
}*/
return el.textContent.trim().length;
}).length == 1;
});
return soLink;
}
for (var n = 0; n < 20; n++) {
console.time("teste1");
for (var i = 0; i < 1000; i++) {
var els = temSoClasse('.box', 'a.link');
}
console.timeEnd("teste1");
console.time("teste2");
for (var i = 0; i < 1000; i++) {
var els = temSoClasse('.box', 'a.link');
}
console.timeEnd("teste2");
console.log("---");
}