Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 跨多个字段隐藏/显示特定长度内的更多文本_Javascript_Jquery - Fatal编程技术网

Javascript 跨多个字段隐藏/显示特定长度内的更多文本

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

我希望文本只有一定数量的字符/长度,在该长度之后,我希望放置一个链接以显示文本的完整长度。但不仅如此,我希望这个功能能够跨多个文本字段工作。在本例中,我使用的是Laravel,因此使用了刀片模板

HTML/Blade:

@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;
显示:块;
溢出:隐藏;
断字:断字;
单词包装:打断单词;
}

知识是一种美德,是一种美德,是一种美德,是一种美德。但是,在最低限度上,我们需要一个实验室来进行日常工作。两人或两人在一个无教区的房间里互相指责。除偶尔因疏忽而死亡外,不得因疏忽而导致动物死亡
两人或两人在一个无教区的房间里互相指责。除偶尔因疏忽而死亡外,不得因疏忽而导致动物死亡
知识是一种美德,是一种美德,是一种美德,是一种美德。但是,在最低限度上,我们需要一个实验室来进行日常工作。两人或两人在一个无教区的房间里互相指责。除偶尔因疏忽而死亡外,不得因疏忽而导致动物死亡
酒后驾车