#jquery #html #onclick #expand
#jquery #HTML #onclick #Развернуть
Вопрос:
На моей веб-странице есть несколько разделов с новостями разного типа. Некоторые с изображениями, некоторые без (просто текст). Я хочу иметь возможность отображать первый абзац или первый div каждой истории, а затем по щелчку переключать все содержимое div (истории).
Я нашел этот фрагмент кода на веб-сайте CSS Tricks:
var news = 2;
hidenews = "- Hide news archive";
shownews = " Show news archive";
$(".archive").html( shownews );
$(".news:not(:lt(" news "))").hide();
$(".archive").click(function (e) {
e.preventDefault();
if ($(".news:eq(" news ")").is(":hidden")) {
$(".news:hidden").show();
$(".archive").html( hidenews );
} else {
$(".news:not(:lt(" news "))").hide();
$(".archive").html( shownews );
}
});
<div class="news">First news</div>
<div class="news">Second news</div>
<div class="news">Third news</div>
<a class="archive" href="#"></a>
Это отлично работает, но только с одним div. С несколькими на странице, когда я нажимаю кнопку «Показать», открываются все разделы.
Кто-нибудь может помочь мне отредактировать код, чтобы при нажатии открывалась только одна история, а не все из них, пожалуйста?
Ответ №1:
вот измененная версия вашего кода
$(document).ready(function(){
var news = 0;
hidenews = "- Hide news archive";
shownews = " Show news archive";
$(".archive").html( shownews );
$(".news").hide();
$(".archive").click(function (e) {
e.preventDefault();
var $container = $(e.currentTarget).closest('.accordion-container');
if ($container.find(".news:eq(" news ")").is(":hidden")) {
$container.find(".news:not(:lt(" news "))").slideDown();
$container.find(".archive").html( hidenews );
} else {
$container.find(".news:not(:lt(" news "))").slideUp();
$container.find(".archive").html( shownews );
}
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<body>
<div class="accordion-container">
<div class="title">First news</div>
<div class="news">Second news</div>
<div class="news">Third news</div>
<a class="archive" href="#"></a>
</div>
<div class="accordion-container">
<div class="title">First news</div>
<div class="news">Second news</div>
<div class="news">Third news</div>
<a class="archive" href="#"></a>
</div>
<div class="accordion-container">
<div class="title">First news</div>
<div class="news">Second news</div>
<div class="news">Third news</div>
<a class="archive" href="#"></a>
</div>
<div class="accordion-container">
<div class="title">First news</div>
<div class="news">Second news</div>
<div class="news">Third news</div>
<a class="archive" href="#"></a>
</div>
<div class="accordion-container">
<div class="title">First news</div>
<div class="news">Second news</div>
<div class="news">Third news</div>
<a class="archive" href="#"></a>
</div>
</body>
Комментарии:
1. Это отлично работает! Спасибо. Возможно ли, чтобы он сворачивался при загрузке? Прямо сейчас, когда страница загружается, отображаются целые истории.
2. Также насколько сложно было бы добавить приятные плавные переходы?
3. @user7040259 пожалуйста, проверьте, что ответ отредактирован для переходов и по умолчанию свернут.
Ответ №2:
У вас должна быть toggle
кнопка для каждого элемента.
//Hide all content
$('.content').hide();
$('.archive').click(function(){
//Get content DIV
var content = $(this).parent('.news').find('.content');
//Content toggle
content.toggle();
//Show / Hide adjusted
$(this).text(content.is(":visible") ? 'Hide' : 'Show');
});
$('.content').hide();
$('.archive').click(function(){
var content = $(this).parent('.news').find('.content');
content.toggle();
$(this).text(content.is(":visible") ? 'Hide' : 'Show');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="news">First news
<div class="content">First news Content</div>
<a class="archive" href="#">Show</a>
</div>
<div class="news">Second news
<div class="content">Second news Content</div>
<a class="archive" href="#">Show</a>
</div>
<div class="news">Third news
<div class="content">Third news Content</div>
<a class="archive" href="#">Show</a>
</div>
Ответ №3:
Вы также можете использовать bootstrap accordian. Возможно, вам придется немного отредактировать.
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
<h2>Accordion </h2>
<div class="panel-group" id="accordion">
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
<a data-toggle="collapse" data-parent="#accordion" href="#collapse1">Collapsible Group 1</a>
</h4>
</div>
<div id="collapse1" class="panel-collapse collapse in">
<div class="panel-body">Lorem ipsum dolor sit amet, consectetur adipisicing elit,
</div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
<a data-toggle="collapse" data-parent="#accordion" href="#collapse2">Collapsible Group 2</a>
</h4>
</div>
<div id="collapse2" class="panel-collapse collapse">
<div class="panel-body">Lorem ipsum dolor sit amet, consectetur adipisicing elit,
</div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
<a data-toggle="collapse" data-parent="#accordion" href="#collapse3">Collapsible Group 3</a>
</h4>
</div>
<div id="collapse3" class="panel-collapse collapse">
<div class="panel-body">Lorem ipsum dolor sit amet, consectetur adipisicing elit,
</div>
</div>
</div>
</div>
</div>
</body>
</html>
Комментарии:
1. Спасибо за быстрый ответ. Аккордеон — это не совсем то, что мне нужно. Мне нужно, чтобы кнопка под историей была прочитана / просмотрена больше, и как только div будет расширен, измените его, чтобы читать / просматривать меньше.
Ответ №4:
Используйте функцию jQuery Accordion.Проверьте эту ссылку https://jqueryui.com/accordion /