У меня есть электронная коммерция с несколькими типами описаний, это могут быть абзацы, неупорядоченные списки или упорядоченные списки. Я использую скрипт для функции «увидеть больше/увидеть меньше», которую мне удалось заставить работать правильно в зависимости от количества абзацев и их длины. Но бывают ситуации, когда текст представляет собой просто список, и для этих случаев я не могу найти способ заставить скрипт работать корректно. В html примере последний содержит только список без абзацев после него, скрипт не работает. В чем ошибка?
jQuery.noConflict();
jQuery(document).ready(function($) {
$('.description').each(function(){
var p = $(this).find('p, ul, ol');
var LiN = p.length;
if ( LiN > 3){
$(p).eq(2).nextAll().hide().addClass('toggleable');
$(this).find('p, ul, ol').eq(4).nextAll().hide().addClass('toggleable');
$(this).append('<p class = "more">Read more...</p>');
}
});
$('.description').on('click','.more', function(){
if ( $(this).hasClass('less') ){
$(this).text('Read more...').removeClass('less');
}else{
$(this).text('Read less...').addClass('less');
}
$(this).siblings('p.toggleable, ul.toggleable, ol.toggeable').slideToggle();
});
});.more{color:red; cursor:pointer;}<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class = "description">
<p>Párrafo 01</p>
<p>Párrafo 02</p>
<p>Párrafo 02</p>
<p>Párrafo 04</p>
<p>Párrafo 05</p>
<p>Párrafo 06</p>
</div>
<div class = "description">
<p>Lorem Ipsum is simply dummy text </p>
<ul>
<li>Lista 01</li>
<li>Lista 02</li>
<li>Lista 03</li>
<li>Lista 04</li>
<li>Lista 05</li>
<li>Lista 06</li>
</ul>
<p>Lorem Ipsum is simply dummy text </p>
<p>Lorem Ipsum is simply dummy text </p>
<p>Lorem Ipsum is simply dummy text </p>
<p>Lorem Ipsum is simply dummy text </p>
<p>Lorem Ipsum is simply dummy text </p>
</div>
<div class = "description">
<p>Lorem Ipsum is simply dummy text </p>
<ol>
<li>Lista 01</li>
<li>Lista 02</li>
<li>Lista 03</li>
<li>Lista 04</li>
<li>Lista 05</li>
<li>Lista 06</li>
</ol>
<p>Lorem Ipsum is simply dummy text </p>
<p>Lorem Ipsum is simply dummy text </p>
<p>Lorem Ipsum is simply dummy text </p>
<p>Lorem Ipsum is simply dummy text </p>
<p>Lorem Ipsum is simply dummy text </p>
</div>
<div class = "description">
<p>Lorem Ipsum is simply dummy text </p>
<ul>
<li>Lista 01</li>
<li>Lista 02</li>
<li>Lista 03</li>
<li>Lista 04</li>
<li>Lista 05</li>
<li>Lista 06</li>
<li>Lista 07</li>
<li>Lista 08</li>
<li>Lista 09</li>
<li>Lista 10</li>
</ul>
</div>Извините, исправлено, спасибо



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете дать общий класс всем вашим элементам, а затем использовать этот класс и :gt(), чтобы скрыть или показать нужные элементы.
Демонстрационный код:
jQuery.noConflict();
jQuery(document).ready(function($) {
$(".description").find('p, ul > li, ol > li').addClass("elements"); //add this class to all elements///
$('.description').each(function() {
var p = $(this).find('.elements');
var LiN = p.length;
if (LiN > 3) {
$(this).find('.elements:gt(2)').hide().addClass('toggleable'); //hide all elements which is > 2
$(this).append('<p class = "more">Read more...</p>');
}
});
$('.description').on('click', '.more', function() {
if ($(this).hasClass('less')) {
$(this).text('Read more...').removeClass('less');
} else {
$(this).text('Read less...').addClass('less');
}
$(this).closest(".description").find(".elements.toggleable").slideToggle(); //use class to hide
});
});.more {
color: red;
cursor: pointer;
}<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class = "description">
<p>Párrafo 01</p>
<p>Párrafo 02</p>
<p>Párrafo 02</p>
<p>Párrafo 04</p>
<p>Párrafo 05</p>
<p>Párrafo 06</p>
</div>
<div class = "description">
<p>Lorem Ipsum is simply dummy text </p>
<ul>
<li>Lista 01</li>
<li>Lista 02</li>
<li>Lista 03</li>
<li>Lista 04</li>
<li>Lista 05</li>
<li>Lista 06</li>
</ul>
<p>Lorem Ipsum is simply dummy text </p>
<p>Lorem Ipsum is simply dummy text </p>
<p>Lorem Ipsum is simply dummy text </p>
<p>Lorem Ipsum is simply dummy text </p>
<p>Lorem Ipsum is simply dummy text </p>
</div>
<div class = "description">
<p>Lorem Ipsum is simply dummy text </p>
<ol>
<li>Lista 01</li>
<li>Lista 02</li>
<li>Lista 03</li>
<li>Lista 04</li>
<li>Lista 05</li>
<li>Lista 06</li>
</ol>
<p>Lorem Ipsum is simply dummy text </p>
<p>Lorem Ipsum is simply dummy text </p>
<p>Lorem Ipsum is simply dummy text </p>
<p>Lorem Ipsum is simply dummy text </p>
<p>Lorem Ipsum is simply dummy text </p>
<ol>
<li>Lista 07</li>
<li>Lista 08</li>
<li>Lista 09</li>
<li>Lista 010</li>
</ol>
</div>
<div class = "description">
<p>Lorem Ipsum is simply dummy text </p>
<ul>
<li>Lista 01</li>
<li>Lista 02</li>
<li>Lista 03</li>
<li>Lista 04</li>
<li>Lista 05</li>
<li>Lista 06</li>
<li>Lista 07</li>
<li>Lista 08</li>
<li>Lista 09</li>
<li>Lista 10</li>
</ul>
</div>Удивительный. Мне нужно изучить это подробно 😉😊
Последний div не имеет класса описания