切换 "more/less" 文本并仅显示点击的元素
Toggle "more/less" text and show only clicked element
我正在尝试 select 仅单击的元素,但它不起作用。如何为单击的元素切换 class 和文本?
这是我的fiddle。我应该从以下代码中更改什么?
$('.click').click(function() {
$('.data').each(function() {
if ($(this).hasClass('open')) {
$(this).removeClass('open');
} else {
$(this).removeClass('open');
$(this).addClass('open');
}
});
$(this).text( $(this).text() == 'less' ? 'more' : 'less');
});
.container {
padding: 0;
width: 100%;
}
.container a {
display: block;
padding: 10px;
}
.data {
background: #fff none repeat scroll 0 0;
height: 10px;
overflow: hidden;
}
.data.open {
height: auto;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<div class="container">
<div class="post">
<div class="data">
<div>aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa</div>
</div>
<a class="click" href="javascript:void(0);">more</a>
</div>
<div class="post">
<div class="data">
<div>bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb</div>
</div>
<a class="click" href="javascript:void(0);">more</a>
</div>
</div>
因此,由于我们有多个 div 和 class data
,我们将它们都切换。
解决这个问题。单击发生后,我们使用 $(this)
select 发生单击的按钮,然后使用 [=30] class data
获得正确的 div =] 方法 .prev()
并执行相同的逻辑!
$('.click').click(function() {
$(this).prev('.data').each(function() {
if ($(this).hasClass('open')) {
$(this).removeClass('open');
} else {
$(this).removeClass('open');
$(this).addClass('open');
}
});
$(this).text( $(this).text() == 'less' ? 'more' : 'less');
});
.container {
padding: 0;
width: 100%;
}
.container a {
display: block;
padding: 10px;
}
.data {
background: #fff none repeat scroll 0 0;
height: 10px;
overflow: hidden;
}
.data.open {
height: auto;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
<div class="post">
<div class="data">
<div>aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa</div>
</div>
<a class="click" href="javascript:void(0);">more</a>
</div>
<div class="post">
<div class="data">
<div>bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb</div>
</div>
<a class="click" href="javascript:void(0);">more</a>
</div>
</div>
您可以组合 .prev() with .toggleClass():
$('.click').on('click', function (e) {
$(this).prev().toggleClass('open');
$(this).text(this.textContent == 'less' ? 'more' : 'less');
});
.container {
padding: 0;
width: 100%;
}
.container a {
display: block;
padding: 10px;
}
.data {
background: #fff none repeat scroll 0 0;
height: 10px;
overflow: hidden;
}
.data.open {
height: auto;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
<div class="post">
<div class="data">
<div>aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa</div>
</div>
<a class="click" href="javascript:void(0);">more</a>
</div>
<div class="post">
<div class="data">
<div>bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb</div>
</div>
<a class="click" href="javascript:void(0);">more</a>
</div>
</div>
请尝试使用不同的 class 名称
jQuery
$('.click').click(函数() {
$("div[class^='data']").each(function() {
if ($(this).hasClass('open')) {
$(this).removeClass('open');
} else {
$(this).removeClass('open');
$(this).addClass('open');
}
});
$(this).text( $(this).text() == 'less' ? 'more' : 'less');
});
CSS
.container {
padding: 0;
width: 100%;
}
.container a {
display: block;
padding: 10px;
}
.data1, .data2 {
background: #fff none repeat scroll 0 0;
height: 10px;
overflow: hidden;
}
.open {
height: auto;
}
HTML
<div class="container">
<div class="post">
<div class="data1">
<div>aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa</div>
</div>
<a class="click" href="javascript:void(0);">more</a>
</div>
<div class="post">
<div class="data2">
<div>bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb</div>
</div>
<a class="click" href="javascript:void(0);">more</a>
</div>
</div>
您不必使用 each()
循环:
$('.click').click(function() {
$('.data').removeClass('open');
$('.click').text('more');
var data = $(this).prev('.data');
if ($(this).text() === 'less') {
$(this).text('more')
data.removeClass('open');
} else {
$(this).text('less')
data.addClass('open');
}
});
.container {
padding: 0;
width: 100%;
}
.container a {
display: block;
padding: 10px;
}
.data {
background: #fff none repeat scroll 0 0;
height: 10px;
overflow: hidden;
}
.data.open {
height: auto;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
<div class="post">
<div class="data">
<div>aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa</div>
</div>
<a class="click" href="javascript:void(0);">more</a>
</div>
<div class="post">
<div class="data">
<div>bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb</div>
</div>
<a class="click" href="javascript:void(0);">more</a>
</div>
</div>
我正在尝试 select 仅单击的元素,但它不起作用。如何为单击的元素切换 class 和文本?
这是我的fiddle。我应该从以下代码中更改什么?
$('.click').click(function() {
$('.data').each(function() {
if ($(this).hasClass('open')) {
$(this).removeClass('open');
} else {
$(this).removeClass('open');
$(this).addClass('open');
}
});
$(this).text( $(this).text() == 'less' ? 'more' : 'less');
});
.container {
padding: 0;
width: 100%;
}
.container a {
display: block;
padding: 10px;
}
.data {
background: #fff none repeat scroll 0 0;
height: 10px;
overflow: hidden;
}
.data.open {
height: auto;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<div class="container">
<div class="post">
<div class="data">
<div>aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa</div>
</div>
<a class="click" href="javascript:void(0);">more</a>
</div>
<div class="post">
<div class="data">
<div>bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb</div>
</div>
<a class="click" href="javascript:void(0);">more</a>
</div>
</div>
因此,由于我们有多个 div 和 class data
,我们将它们都切换。
解决这个问题。单击发生后,我们使用 $(this)
select 发生单击的按钮,然后使用 [=30] class data
获得正确的 div =] 方法 .prev()
并执行相同的逻辑!
$('.click').click(function() {
$(this).prev('.data').each(function() {
if ($(this).hasClass('open')) {
$(this).removeClass('open');
} else {
$(this).removeClass('open');
$(this).addClass('open');
}
});
$(this).text( $(this).text() == 'less' ? 'more' : 'less');
});
.container {
padding: 0;
width: 100%;
}
.container a {
display: block;
padding: 10px;
}
.data {
background: #fff none repeat scroll 0 0;
height: 10px;
overflow: hidden;
}
.data.open {
height: auto;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
<div class="post">
<div class="data">
<div>aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa</div>
</div>
<a class="click" href="javascript:void(0);">more</a>
</div>
<div class="post">
<div class="data">
<div>bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb</div>
</div>
<a class="click" href="javascript:void(0);">more</a>
</div>
</div>
您可以组合 .prev() with .toggleClass():
$('.click').on('click', function (e) {
$(this).prev().toggleClass('open');
$(this).text(this.textContent == 'less' ? 'more' : 'less');
});
.container {
padding: 0;
width: 100%;
}
.container a {
display: block;
padding: 10px;
}
.data {
background: #fff none repeat scroll 0 0;
height: 10px;
overflow: hidden;
}
.data.open {
height: auto;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
<div class="post">
<div class="data">
<div>aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa</div>
</div>
<a class="click" href="javascript:void(0);">more</a>
</div>
<div class="post">
<div class="data">
<div>bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb</div>
</div>
<a class="click" href="javascript:void(0);">more</a>
</div>
</div>
请尝试使用不同的 class 名称
jQuery
$('.click').click(函数() {
$("div[class^='data']").each(function() {
if ($(this).hasClass('open')) {
$(this).removeClass('open');
} else {
$(this).removeClass('open');
$(this).addClass('open');
}
});
$(this).text( $(this).text() == 'less' ? 'more' : 'less');
});
CSS
.container {
padding: 0;
width: 100%;
}
.container a {
display: block;
padding: 10px;
}
.data1, .data2 {
background: #fff none repeat scroll 0 0;
height: 10px;
overflow: hidden;
}
.open {
height: auto;
}
HTML
<div class="container">
<div class="post">
<div class="data1">
<div>aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa</div>
</div>
<a class="click" href="javascript:void(0);">more</a>
</div>
<div class="post">
<div class="data2">
<div>bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb</div>
</div>
<a class="click" href="javascript:void(0);">more</a>
</div>
</div>
您不必使用 each()
循环:
$('.click').click(function() {
$('.data').removeClass('open');
$('.click').text('more');
var data = $(this).prev('.data');
if ($(this).text() === 'less') {
$(this).text('more')
data.removeClass('open');
} else {
$(this).text('less')
data.addClass('open');
}
});
.container {
padding: 0;
width: 100%;
}
.container a {
display: block;
padding: 10px;
}
.data {
background: #fff none repeat scroll 0 0;
height: 10px;
overflow: hidden;
}
.data.open {
height: auto;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
<div class="post">
<div class="data">
<div>aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa</div>
</div>
<a class="click" href="javascript:void(0);">more</a>
</div>
<div class="post">
<div class="data">
<div>bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb bbb</div>
</div>
<a class="click" href="javascript:void(0);">more</a>
</div>
</div>