javascript - 如果 HTML 文本超过一定长度并且 HTML 标记已关闭,则显示“阅读更多”链接
问题描述
当 HTML 文本超过大约 50 个字符并且在最后一个结束标记之后,我正在尝试添加一个“阅读更多”链接。
$(document).ready(function(){
var maxLength = 50;
$(".html-text").each(function(){
var myStr = $(this).html();
if($.trim(myStr).length > maxLength){
var newStr = myStr.substring(0, maxLength);
var removedStr = myStr.substring(maxLength, $.trim(myStr).length);
$(this).empty().html(newStr);
$(this).append('<a href="javascript:void(0);" class="read-more">Read more</a>');
$(this).append('<span class="more-text">' + removedStr + '</span>');
}
});
$(".read-more").click(function(){
$(this).siblings(".more-text").contents().unwrap();
$(this).remove();
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="html-text">
<p>John has a red and white car that goes really fast.</p> <p>He needs to be careful.</p>
</div>
我的结果:
<div class="html-text">
<p>John has a red and white car that goes really fas <a href="javascript:void(0);" class="read-more">Read more</a>
</div>
预期结果:
<div class="html-text">
<p>John has a red and white car that goes really fast.</p> <a href="javascript:void(0);" class="read-more">Read more</a>
</div>
任何想法?希望我说清楚了。
解决方案
我认为可以用不同的方式来解决这个问题:
您需要的似乎是标签中的最后一个文本,而不仅仅是文本。这意味着您可能想要检查标签,然后检查文本大小。您可以检查父节点的每个子节点,直到 HTML 字符串达到您的最大长度,然后输出整个子节点。这样,您就可以保证获得完整的 HTML。希望下面的功能有所帮助
function findRequestedChild(el) {
var cs = el.children();
var textLength = 0;
for (var i = 0; i < cs.length; i++) {
var c = cs[i];
textLength += $(c).html().length;
if(textLength > 50) {
break;
}
}
return $(c).html();
}
alert(findRequestedChild($(".html-text")));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="html-text">
<p>John has a red and white car that goes really fast.</p> <p>He needs to be careful.</p>
</div>
推荐阅读
- javascript - Babel:TypeError:无法将类作为函数调用
- python - Python Selenium 保持登录网站
- python - tensorflow中多类数据的AUC如何计算?
- visual-studio - Visual Studio 签入链接文件的副本 (TFVC)
- c# - 无法加载文件或程序集 Microsoft.AspNetCore.Http.Abstractions,版本 = 5.0.0.0,
- sql - Oracle中根据id生成重复行
- python - Json split python 大文件内存问题
- windows-10 - Windows 10:可以重置键盘布局吗?
- apache-spark - Apache Spark SQL 无法选择 Cassandra 时间戳列
- memory - .NET - 进程的最大可能内存分配大小?