テキストを一定の文字数/長さにしたいと思っています。その長さの後に、テキストの全長を表示するリンクを付ける。しかし、それだけでなく、この機能を複数のテキストフィールドで機能させたいと思っています。この場合、私はLaravelを使用しています。したがって、ブレードテンプレートです。複数のフィールドにまたがる特定の長さのテキストを非表示/表示する
HTML /ブレード:
@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;
}
の作業フィドル:https://jsfiddle.net/jmzqsc1r/1/
ご覧のとおり、意図した機能が動作します。超過したテキストは非表示になり、.status-body-text
が45pxを超えると表示ボタンのみが表示され、アニメーションは素晴らしいなど
問題は、この解決策はページ上の1つだけを対象としていますが、私はこれらの何百もあるかもしれません。期待どおり、最初は.status-body-text
のみが非表示になり(45pxを超える場合)、表示/非表示ボタンはすべて.status-body-text
フィールドに影響します。
これを修正する私の試みは、データ属性識別子の実装を試みることでしたが、良い解決策を見つけることができませんでした。
識別子は、btn-overflow-{{ $status->id }}
のようにまだマークアップされており、対応するstatus-body-text-{{ $status->id }}
と同じ終了番号を持ちます。
ご協力いただければ幸いです。
編集:
Shiladityaの答えは参考になりましたが、あなたは2番目のテキストボックスのテキストのサイズを小さくすれば、それはまだ表示するボタンを示しています。または、最初のテキストボックスのサイズを小さくすると、2番目のボックスに表示ボタンは表示されません。これと同じように:jsfiddle.net/jmzqsc1r/4
これはうまくいきません。コードスニペットで、2番目のテキストボックスのテキストサイズを小さくすると、[表示]ボタンが表示されます。または、最初のテキストボックスのサイズを小さくすると、2番目のボックスに表示ボタンは表示されません。同様に:https://jsfiddle.net/jmzqsc1r/4/ –