Javascript 跨多个字段隐藏/显示特定长度内的更多文本
我希望文本只有一定数量的字符/长度,在该长度之后,我希望放置一个链接以显示文本的完整长度。但不仅如此,我希望这个功能能够跨多个文本字段工作。在本例中,我使用的是Laravel,因此使用了刀片模板 HTML/Blade:Javascript 跨多个字段隐藏/显示特定长度内的更多文本,javascript,jquery,Javascript,Jquery,我希望文本只有一定数量的字符/长度,在该长度之后,我希望放置一个链接以显示文本的完整长度。但不仅如此,我希望这个功能能够跨多个文本字段工作。在本例中,我使用的是Laravel,因此使用了刀片模板 HTML/Blade: @foreach ($statuses as $status) <div class="status-body" data-body-status-id="{{ $status->id }}"> <div class="status-b
@foreach ($statuses as $status)
<div class="status-body" data-body-status-id="{{ $status->id }}">
<div class="status-body-text status-body-text-{{ $status->id }}">{!! $status->body !!}</div>
</div>
<div class="btn-overflow btn-overflow-{{ $status->id }}" data-id-value="{{ $status->id }}">Show</div>
@endforeach
var text = $('.status-body-text'),
btn = $('.btn-overflow'),
h = text[0].scrollHeight;
if(h > 45) {
btn.addClass('less');
btn.css('display', 'block');
}
btn.click(function(e)
{
e.stopPropagation();
if (btn.hasClass('less')) {
btn.removeClass('less');
btn.addClass('more');
btn.text('Hide');
text.animate({'height': h});
} else {
btn.addClass('less');
btn.removeClass('more');
btn.text('Show');
text.animate({'height': '45px'});
}
});
.btn-overflow {
display: none;
border-radius: 3px;
text-align: center;
width: 42px;
margin: 0 auto;
}
.status-body-text {
height:45px;
display:block;
overflow:hidden;
word-break: break-word;
word-wrap: break-word;
}
样式:
@foreach ($statuses as $status)
<div class="status-body" data-body-status-id="{{ $status->id }}">
<div class="status-body-text status-body-text-{{ $status->id }}">{!! $status->body !!}</div>
</div>
<div class="btn-overflow btn-overflow-{{ $status->id }}" data-id-value="{{ $status->id }}">Show</div>
@endforeach
var text = $('.status-body-text'),
btn = $('.btn-overflow'),
h = text[0].scrollHeight;
if(h > 45) {
btn.addClass('less');
btn.css('display', 'block');
}
btn.click(function(e)
{
e.stopPropagation();
if (btn.hasClass('less')) {
btn.removeClass('less');
btn.addClass('more');
btn.text('Hide');
text.animate({'height': h});
} else {
btn.addClass('less');
btn.removeClass('more');
btn.text('Show');
text.animate({'height': '45px'});
}
});
.btn-overflow {
display: none;
border-radius: 3px;
text-align: center;
width: 42px;
margin: 0 auto;
}
.status-body-text {
height:45px;
display:block;
overflow:hidden;
word-break: break-word;
word-wrap: break-word;
}
工作小提琴:
现在,正如您所看到的,预期的功能起作用了。超出的文本被隐藏,显示按钮仅在状态正文文本
超过45px时显示,动画效果良好,等等
问题是,这个解决方案只针对页面上的其中一个,而在我的页面上可能有数百个。正如您所料,最初只隐藏第一个.status body文本
(如果超过45px),并且显示/隐藏按钮会影响所有.status body文本
字段
我试图解决这个问题是为了实现数据属性标识符,但似乎找不到好的解决方案
标识符仍在标记中,例如btn溢出-{{{$status->id}}
,它将具有与其对应的状态正文文本相同的结束号-{{$status->id}
任何帮助都将不胜感激
编辑:
@foreach ($statuses as $status)
<div class="status-body" data-body-status-id="{{ $status->id }}">
<div class="status-body-text status-body-text-{{ $status->id }}">{!! $status->body !!}</div>
</div>
<div class="btn-overflow btn-overflow-{{ $status->id }}" data-id-value="{{ $status->id }}">Show</div>
@endforeach
var text = $('.status-body-text'),
btn = $('.btn-overflow'),
h = text[0].scrollHeight;
if(h > 45) {
btn.addClass('less');
btn.css('display', 'block');
}
btn.click(function(e)
{
e.stopPropagation();
if (btn.hasClass('less')) {
btn.removeClass('less');
btn.addClass('more');
btn.text('Hide');
text.animate({'height': h});
} else {
btn.addClass('less');
btn.removeClass('more');
btn.text('Show');
text.animate({'height': '45px'});
}
});
.btn-overflow {
display: none;
border-radius: 3px;
text-align: center;
width: 42px;
margin: 0 auto;
}
.status-body-text {
height:45px;
display:block;
overflow:hidden;
word-break: break-word;
word-wrap: break-word;
}
Shiladitya的回答很有帮助,但如果减小第二个文本框的文本大小,它仍然会显示“显示”按钮。或者,如果减小第一个文本框的大小,则“显示”按钮不会出现在第二个文本框上。比如:jsfiddle.net/jmzqsc1r/4
var text=$('.status body text'),
btn=$('.btn溢出'),
h=文本[0]。滚动高度;
如果(h>45){
btn.addClass(“较少”);
css('display','block');
}
点击(功能(e)
{
e、 停止传播();
if($(this).hasClass('less')){
$(this.removeClass('less');
$(this.addClass('more');
$(this.text('Hide');
$('#cont'+$(this.attr('val')).animate({'height':h});
}否则{
$(this.addClass('less');
$(this.removeClass('more');
$(this.text('Show');
$('#cont'+$(this.attr('val')).animate({'height':'45px');
}
});
.btn溢出{
显示:无;
边界半径:3px;
文本对齐:居中;
保证金:0自动;
}
.状态正文{
高度:45px;
显示:块;
溢出:隐藏;
断字:断字;
单词包装:打断单词;
}
知识是一种美德,是一种美德,是一种美德,是一种美德。但是,在最低限度上,我们需要一个实验室来进行日常工作。两人或两人在一个无教区的房间里互相指责。除偶尔因疏忽而死亡外,不得因疏忽而导致动物死亡
两人或两人在一个无教区的房间里互相指责。除偶尔因疏忽而死亡外,不得因疏忽而导致动物死亡
知识是一种美德,是一种美德,是一种美德,是一种美德。但是,在最低限度上,我们需要一个实验室来进行日常工作。两人或两人在一个无教区的房间里互相指责。除偶尔因疏忽而死亡外,不得因疏忽而导致动物死亡
两人或两人在一个无教区的房间里互相指责。除偶尔因疏忽而死亡外,不得因疏忽而导致动物死亡
这是您的解决方案
var text=$('.status body text'),
btn=$('.btn溢出'),
h=文本[0]。滚动高度;
如果(h>45){
btn.addClass(“较少”);
css('display','block');
}
点击(功能(e)
{
e、 停止传播();
if($(this).hasClass('less')){
$(this.removeClass('less');
$(this.addClass('more');
$(this.text('Hide');
$('#cont'+$(this.attr('val')).animate({'height':h});
}否则{
$(this.addClass('less');
$(this.removeClass('more');
$(this.text('Show');
$('#cont'+$(this.attr('val')).animate({'height':'45px');
}
});
.btn溢出{
显示:无;
边界半径:3px;
文本对齐:居中;
保证金:0自动;
}
.状态正文{
高度:45px;
显示:块;
溢出:隐藏;
断字:断字;
单词包装:打断单词;
}
知识是一种美德,是一种美德,是一种美德,是一种美德。但是,在最低限度上,我们需要一个实验室来进行日常工作。两人或两人在一个无教区的房间里互相指责。除偶尔因疏忽而死亡外,不得因疏忽而导致动物死亡
两人或两人在一个无教区的房间里互相指责。除偶尔因疏忽而死亡外,不得因疏忽而导致动物死亡
知识是一种美德,是一种美德,是一种美德,是一种美德。但是,在最低限度上,我们需要一个实验室来进行日常工作。两人或两人在一个无教区的房间里互相指责。除偶尔因疏忽而死亡外,不得因疏忽而导致动物死亡
酒后驾车