javascript - 阅读更多功能
问题描述
我正在尝试提出一种解决方案,为页面上的一堆框添加阅读更多功能。
我看到的最简单的解决方案是:https ://www.w3schools.com/howto/howto_js_read_more.asp但问题是内容由 cms 控制,因此无法手动添加跨度等。此外,本例中的 JS 仅在第一条内容上激活,因此不适用于多条内容。
我一直在考虑创建一些 js 来查找 div 类并在一定数量的字符数/单词/基于 div 高度中添加功能,但到目前为止我无法找到合适的解决方案。理想情况下,如果文本低于限制,则根本不会出现阅读更多按钮。
供参考的是我的 html 的简化版本:
<div class="col-sm-12">
<div class="supp-item-body">
<h3>title</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam sed dolor odio. Suspendisse tempor vestibulum sodales. Maecenas faucibus at libero vitae iaculis. Nam rhoncus sit amet lacus elementum elementum. Sed ut odio tristique, scelerisque odio a, lacinia risus.</p>
</div>
</div>
<div class="col-sm-12">
<div class="supp-item-body">
<h3>title</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam sed dolor odio. Suspendisse tempor vestibulum sodales. Maecenas faucibus at libero vitae iaculis. Nam rhoncus sit amet lacus elementum elementum. Sed ut odio tristique, scelerisque odio a, lacinia risus.</p>
</div>
</div>
<div class="col-sm-12">
<div class="supp-item-body">
<h3>title</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam sed dolor odio. Suspendisse tempor vestibulum sodales. Maecenas faucibus at libero vitae iaculis. Nam rhoncus sit amet lacus elementum elementum. Sed ut odio tristique, scelerisque odio a, lacinia risus.</p>
</div>
</div>
<div class="col-sm-12">
<div class="supp-item-body">
<h3>title</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam sed dolor odio. Suspendisse tempor vestibulum sodales. Maecenas faucibus at libero vitae iaculis. Nam rhoncus sit amet lacus elementum elementum. Sed ut odio tristique, scelerisque odio a, lacinia risus.</p>
</div>
</div>
再加上几次。为了清楚起见,我删除了不相关的元素。
如果我愿意接受建议,那么我可能只是在寻找错误的方向。
非常感谢。
解决方案
这是一个非常适合您给我的确切代码的解决方案,只要每个 div 有一个段落,其中只有纯文本。但是,如果您将 HTML 添加到段落中(不仅仅是纯文本),或者如果您希望每个supp-item-body
div 中有多个段落,那么您将不得不稍微调整代码。请注意,此解决方案使用 jQuery,您将其作为标签添加到您的问题中,因此我假设您已经在项目中使用了它。
只需将其复制并粘贴到一个空白的 .html 文件中,然后在 Chrome 中打开它即可查看它的运行情况。
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
</head>
<body>
<div class="col-sm-12">
<div class="supp-item-body">
<h3>title</h3>
<p>Atheism includes any philosophy which claims that no God or gods exist, including any rational or reasoning creator of the universe. However, if premises begin to exist without reason, then conclusions drawn from them are also without reason. If there is no god, all initial human premises about the external world begin to exist without reason. Therefore, if there is no god, all human conclusions about the external world are also without reason.</p>
</div>
</div>
<div class="col-sm-12">
<div class="supp-item-body">
<h3>title</h3>
<p>Polytheism refers to any philosophy which claims that there are multiple supreme creators of the universe. However, if anyone is not the author of every aspect of creation, then his authority is insufficient to rationally guarantee the behavior of creation. Under polytheism, no one is the author of every aspect of creation. Therefore, under polytheism, no one has the authority to rationally guarantee the behavior of creation.</p>
</div>
</div>
<div class="col-sm-12">
<div class="supp-item-body">
<h3>title</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam sed dolor odio. Suspendisse tempor vestibulum sodales. Maecenas faucibus at libero vitae iaculis. Nam rhoncus sit amet lacus elementum elementum. Sed ut odio tristique, scelerisque odio a, lacinia risus.</p>
</div>
</div>
<div class="col-sm-12">
<div class="supp-item-body">
<h3>title</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam sed dolor odio. Suspendisse tempor vestibulum sodales. Maecenas faucibus at libero vitae iaculis. Nam rhoncus sit amet lacus elementum elementum. Sed ut odio tristique, scelerisque odio a, lacinia risus.</p>
</div>
</div>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script>
$('.supp-item-body p').each(function(i, el)
{
var p = $(el);
var pTxt = p.text();
if (pTxt.length > 120)
{
var pTxtA = pTxt.substring(0, 120);
pTxtA = pTxtA.substring(0, pTxtA.lastIndexOf(' '));
pTxtB = pTxt.substring(pTxtA.length + 1);
var pHtml = pTxtA + '<span class="dots">...</span> <span class="more-text" style="display: none;">' + pTxtB + '</span>';
p.html(pHtml);
}
var btn = $('<button>Read more</button>')
btn.unbind('click.more').bind('click.more', function(e)
{
e.preventDefault();
p.find('.more-text').toggle();
p.find('.dots').toggle();
});
p.after(btn);
});
</script>
</body>
</html>
推荐阅读
- reactjs - Why is shouldComponentUpdate not firing despite my props changing?
- encryption - 多对多消息加密选项
- html - pure-u-1-7 与 sm、md、lg、xl 结合使用时不起作用
- android - 从 Reddit API 获取媒体的应用的内容分级
- r - 错误:函数不适用于包 X 的 .Call()
- apache-spark - 在dataframe中修改后,将创建多少个阶段和任务
- c# - DateTime 格式 - 任何系统 Datetime.now 到 "DD/MM/YYYY hh:mm:ss"
- eclipse-hono - 如何使用客户端证书对 Hono 进行身份验证?
- wordpress - 在单元格中包含当前日期的整行突出显示或加粗字体
- android - Firebase 动态链接 PendingDynamicLinkData 返回 null android