我有我的属性,其中也是描述(从DB获取),但由于它太长,我需要隐藏它的大部分,并再次显示它的“读更多”按钮。我知道硬编码文本的解决方案,但我不知道如何将其应用于获取的数据。
我在想这样的事情:
<p class="card-text"><?php
if(strlen($fetch['description']) > 50) {
echo '<a href="#" class="read-more">Show More</a>';
} else {
// SOLUTION HERE
}
?></p>用于更改显示的jQuery -更多-显示更少:
$(document)
.on('click','.read-more',function() {
$(this).removeClass('read-more').addClass('show-less').html('Show Less').prev('.description').removeClass('ellipsis');
})
.on('click','.show-less',function() {
$(this).removeClass('show-less').addClass('read-more').html('Read More').prev('.description').addClass('ellipsis');
});发布于 2021-01-03 10:07:31
很抱歉这么说,但我认为你的做法是错误的。
如果php代码只是将前50个字符输出到HTML页面,例如使用substr(),则HTML代码中的其余文本将不存在!因此,您的jquery将无法显示它(除非使用AJAX/Reload,否则会造成极大的过度消耗)。
您的解决方案应该是:获取所有文本,如果太长,只显示介绍文本,隐藏剩余文本,并通过JS/JQUERY显示剩余文本,如在文章如何在一定长度内隐藏/显示更多文本(如youtube)中所解释的那样
从上面的链接柱上拿出的小提琴正好显示了所期望的行为。
http://jsfiddle.net/zA23k/215/
因此,您的HTML输出应该类似于(修改后的代码)
[...]Mary had a little lamb
<span class="complete">
Its fleece was white as snow And everywhere that Mary went</span>
<span class="more">more...</span>
[...]因此,您的代码应该如下所示:
<p class="card-text"><?php
$txt=$fetch['description'];
if(strlen($txt) < 50) {
echo $txt;
} else {
echo substr($txt,0,50)."<span class=\"complete\">". substr($txt,50)."</span>". "<span class=\"more\">more...</span>";
}
?>
这个非常简单的substr()解决方案有一个缺点:如果位置50在一个单词内,这个单词将被肢解。
这可以用字包()或regexp修复。
https://stackoverflow.com/questions/65542942
复制相似问题