Причина, по которой ваш jQuery выводит неожиданные значения каждого элемента, заключается в том, что ваш HTML-код недействителен.Если у вас неверный HTML, браузер автоматически попытается исправить его, переместив / удалив разделы, которые, как он знает, недействительны.Если вы посмотрите на DOM, вы увидите, что некоторые из ваших элементов не существуют.
Например, <p> <p> cool </p> </p>
выдает следующее во время рендеринга:
В приведенном выше примере вы можете видеть, что действительно, только один элемент <p>
содержит cool
, что приводит к одному совпадению.
Исправление неверного HTML также отображаетправильные результаты:
$(document).ready(function() {
$("#co").text($("span:contains('cool')").length)
$("#co1").text($("div:contains('cool')").length)
$("#co2").text($("li:contains('cool')").length)
$("#co3").text($("p:contains('cool')").length)
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Span -<span id="co"> </span>
<div></div>
Div -<span id="co1"> </span>
<div></div>
Li -<span id="co2"> </span>
<div></div>
p -<span id="co3"> </span>
<br><br>
<div>
<div>cool</div>
</div>
<p>cool</p>
<ul>
<li>cool</li>
</ul>
<span>cool</span>