Вы можете преобразовать li
s в массив, чтобы вы могли кратко манипулировать ими с помощью методов массива, таких как filter
, sort
и slice
:
const ul = document.querySelector('.widget_list');
const liToPostCount = li => Number(li.querySelector('span').textContent.match(/^\d+/));
const lis = [...ul.children];
const highestFour = lis
.filter((li) => liToPostCount(li) > 0)
.sort((a, b) => liToPostCount(b) - liToPostCount(a))
.slice(0, 4);
lis.forEach(li => li.remove());
highestFour.forEach(li => ul.appendChild(li));
<div id="et_authors-3" class="widget et_pb_widget widget_et_authors">
<div class="widget_content">
<ul class="widget_list">
<li>
<a href="https://example.com" class="widget_list_author">
<h3 class="title">Barry White</h3>
<span class="post-meta">1 Posts</span>
</a>
</li>
<li>
<a href="https://example.com" class="widget_list_author">
<h3 class="title">Bob Marley</h3>
<span class="post-meta">11 Posts</span>
</a>
</li>
<li>
<a href="https://example.com" class="widget_list_author">
<h3 class="title">Elton John</h3>
<span class="post-meta">4 Posts</span>
</a>
</li>
<li>
<a href="https://example.com" class="widget_list_author">
<h3 class="title">Stevie Wonder</h3>
<span class="post-meta">5 Posts</span>
</a>
</li>
<li>
<a href="https://example.com" class="widget_list_author">
<h3 class="title">Michael Jackson</h3>
<span class="post-meta">12 Posts</span>
</a>
</li>
<li>
<a href="https://example.com" class="widget_list_author">
<h3 class="title">Elvis Presley</h3>
<span class="post-meta">0 Posts</span>
</a>
</li>
<li>
<a href="https://example.com" class="widget_list_author">
<h3 class="title">Phil Collins</h3>
<span class="post-meta">0 Posts</span>
</a>
</li>
</ul>
</div>
</div>
Если вы не хотите полностью удалять непроходные li
s, измените их стиль вместо вызова .remove()
:
const ul = document.querySelector('.widget_list');
const liToPostCount = li => Number(li.querySelector('span').textContent.match(/^\d+/));
const lis = [...ul.children];
lis.forEach((li) => li.style.display = 'none');
const highestFour = lis
.filter((li) => liToPostCount(li) > 0)
.sort((a, b) => liToPostCount(b) - liToPostCount(a))
.slice(0, 4);
highestFour.forEach((li) => {
li.style.display = 'block';
ul.appendChild(li);
});
<div id="et_authors-3" class="widget et_pb_widget widget_et_authors">
<div class="widget_content">
<ul class="widget_list">
<li>
<a href="https://example.com" class="widget_list_author">
<h3 class="title">Barry White</h3>
<span class="post-meta">1 Posts</span>
</a>
</li>
<li>
<a href="https://example.com" class="widget_list_author">
<h3 class="title">Bob Marley</h3>
<span class="post-meta">11 Posts</span>
</a>
</li>
<li>
<a href="https://example.com" class="widget_list_author">
<h3 class="title">Elton John</h3>
<span class="post-meta">4 Posts</span>
</a>
</li>
<li>
<a href="https://example.com" class="widget_list_author">
<h3 class="title">Stevie Wonder</h3>
<span class="post-meta">5 Posts</span>
</a>
</li>
<li>
<a href="https://example.com" class="widget_list_author">
<h3 class="title">Michael Jackson</h3>
<span class="post-meta">12 Posts</span>
</a>
</li>
<li>
<a href="https://example.com" class="widget_list_author">
<h3 class="title">Elvis Presley</h3>
<span class="post-meta">0 Posts</span>
</a>
</li>
<li>
<a href="https://example.com" class="widget_list_author">
<h3 class="title">Phil Collins</h3>
<span class="post-meta">0 Posts</span>
</a>
</li>
</ul>
</div>
</div>