У меня есть некоторая простая функция show/hide, в которой на данной странице есть несколько новостей, а при загрузке страницы они находятся в состоянии "показывать меньше" - и при нажатии "больше" они скатываются вниз, чтобы показать полную статья. здесь мой код.
$(".show-more").if($(".text").hasClass("show-more-height"));
$(".text").toggleClass("show-more-height");
$(".show-more").toggleClass("show-less");
});
с моим html, который выглядит примерно так:
<div class="newsitem">
<div class="text">a bunch of text</div>
<div class="show-more">
<span class="more">More</span>
<span class="less">Less</span>
</div>
</div>
По сути, он работает нормально - но если у меня есть несколько новостей на странице, событие click вызывает все, чтобы показать/скрыть. Я предполагаю, что мне нужно настроить таргетинг на.newsitem, а затем использовать "это", но я не уверен, как это сделать.
Заранее спасибо.
Я считаю, что вы хотите $(this).find('.show-more')
но вы можете приблизиться к этому чуть меньше javascripty.
Вот что я думаю:
$('.news-items').on('click', '.show-more,.show-less', function () {
var $newsItem = $(this).closest('.news-item');
$newsItem.toggleClass('expanded');
});
Затем управляйте меньшим дисплеем от css.
.news-item {
border: 1px solid red;
margin-bottom: 10px;
}
.news-item.expanded {
height: 300px;
}
.show-less {
display: none;
}
.expanded .show-more {
display: none;
}
.expanded .show-less {
display: block;
}
Вот небольшая демонстрация: http://jsbin.com/bidawudu/3/edit?html,js,output
jQuery.fn.if()
, что он делает?