Я сделал сценарий «читать больше, читать меньше» для своего интернет-магазина на Magento 2. Это используется на странице категории, где есть блоки подкатегорий сервалов на выбор, каждая подкатегория имеет описание.
Проблема: если я нажму «Читать дальше», все описания подкатегорий будут расширяться, а не только описание подкатегории, на которую я нажал подробнее.
Я начинаю изучать PHP и Magento 2, но не могу это исправить, кто-нибудь знает решение?
<div class = "product description product-item-description">
<div class = "more">
<?php if ($_subCategory->getDescription()) {
$string = strip_tags($_subCategory->getDescription());
if (strlen($string) > 250) {
// truncate string
$stringCut = substr($string, 0, 250);
$string = substr($stringCut, 0, strrpos($stringCut, ' ')).'... <a href = "javascript:void(0);" class = "readmore">Lees meer</a>';
}
echo $string;
?>
</div>
<?php
}else {?>
<?php /* @escapeNotVerified */ echo $_attributeValue;
}
?>
</div>
<div class = "less" style = "display:none">
<?php echo $_subCategory->getDescription(); ?>
<a href = "javascript:void(0);" class = "readless">Lees minder</a>
</div>
<script type = "text/javascript">
console.info('test');
require(["jquery"],function($){
$('.readmore').on("click",function(){
$('.less').show();
$('.more').hide();
});
$('.readless').on("click",function(){
$('.less').hide();
$('.more').show();
});
});
</script>
</div>



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


Это связано с тем, что при вводе $('.less').hide(); происходит захват элемента каждый с атрибутом class='less'. Вот как я бы преодолел это:
Начните с присоединения уникального атрибута к каждому <div class = "more"> или <div class = "less"> - в этом случае мы используем атрибут класса: (и перемещаем «больше» или «меньше» в я бы)
<div id = "read-more-block" class = "cat-<?php echo $_subCategory->getId(); ?>">
<!-- my "read more" content -->
<a class = "link" href = "#read-more-block">Read Less</a>
</div>
<div id = "read-less-block" class = "cat-<?php echo $_subCategory->getId(); ?>">
<!-- my "read less" content -->
<a class = "link" href = "#read-less-block">Read More</a>
</div>
Теперь у нас есть читать дальше-блок и блок без чтения для каждой подкатегории. Когда мы щелкаем внутри ссылка на сайт, должно срабатывать событие jQuery, которое скроет себя и отобразит другое.
А затем в вашем jQuery:
$('#read-more-block .link').on('click', function() {
var $readLessBlock = $('#read-less-block.' + $(this).parent().attr('class'));
$readLessBlock.show(); //Show the read less block
$(this).parent().hide(); //Hide the read more block
});
..и наоборот, если читать меньше.
Спасибо, Адам, ваш код с модификациями помог мне это исправить.