自定义加载更多文本功能
custom load more text function
假设我们有这个:
<div class="content">
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.</p>
<p>Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. </p>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.</p>
<p>Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. </p>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.</p>
<p>Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. </p>
</div>
<div class="porfolio-single-load-more">
<a href="#" class="icon-holder prevent-history">
<i class="icon-plus"></i>
</a>
</div>
我们只想显示前300个字符,当点击加载更多按钮时,显示其余的文本,
我想解决方案是将多余的字符包装到一个隐藏的div中,但我不知道如何做到这一点,
我如何用div从char301换行到文本末尾?
var textcnt = this.mainCnt.find('.single-portfolio .content');
if(textcnt.text().length > 300){
/* ?? */
}else{
$('.porfolio-load-more a').remove();
}
这里的问题是每一行代码都是自己的DOM元素。如果你不能重构底层的html,那么你要做的就是迭代每个p元素,提取html文本(并附加到一个字符串),擦除内容div,然后插入字符串和div分隔符。
所以类似的东西
var full = "";
$('.content').children('p').each(function(){
full = full.concat($(this).html());
}
$('.content').html("");
var first = full.substring(0, 300);
var rest = full.substring(301);
$('.content').append(first + "</div><div id='"hidden'">" + rest);
这将按照您想要的方式拆分div。将display of hidden设置为none,然后用$.on()将onclick处理程序附加到按钮上,以显示()it
试试这个
var wtext = $('.content').html().substr(300);
$('.content').html( $('.content').html().substr(0, 300) + '<span class="hidden">' + wtext + '</span>' );
当然,这不考虑标签,所以很不幸,它可能会被拆分到html标签的中间。在这种情况下,您需要进行某种检查以防止这种情况发生。
尝试使用jquery数据来存储全文。我做了一个简单的测试。你可以试试。
JavaScript:
var $textcnt = $(".content p");
if($textcnt.text().length>300){
$.data(document.body,"content",$textcnt.text());
$textcnt.text($textcnt.text().substr(0,300)+"...");
}else
{
$("#read-more").remove();
}
$("#read-more").click(function(){
$textcnt.text($.data(document.body,"content"));
});
Html:
<div class="content">
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.</p>
<a id="read-more" href="#" class="icon-holder prevent-history">
Read more
</a>
</div>
这是JSFIDDLE演示
希望这对你有帮助。
我最终向表中添加了CSS。。
不破坏标记是非常棘手的(尤其是当将更新标记的用户不了解HTML时)
这就是我所做的:
var textcnt = this.mainCnt.find('.single-portfolio .content');
if(textcnt.text().length > 300){
/* ?? */
textcnt.addClass('ellipsis');
this.mainCnt.on('click','.porfolio-single-load-more a',function (e) {
e.preventDefault();
$('.porfolio-single-load-more a').fadeOut(300,function(){ textcnt.removeClass('ellipsis');$(this).remove(); });
});
}else{
$('.porfolio-single-load-more a').remove();
}
然后使用css
.ellipsis{ max-height: 300px; /* som amount that matchs the line-height*font-size per line (ex: 5lines*18px*20px) */ }
相关文章:
- JQuery使用相同的功能自动完成各种输入文本
- jQuery自动完成功能不适用于多个文本输入
- 第二次点击具有不同功能的按钮并更改文本
- 触发功能时做机场插件文本效果
- JavaScript功能不会自动添加具有价格的文本框
- 正在寻找具有多种功能的文本编辑器
- 修复Javascript代码以将文本中的所有Youtube链接转换为Youtube ID功能
- jQuery:在整个文档上触发按键功能,但不在输入和文本区域内
- 如何在文本框中添加标签支持'点击粘贴'功能
- 使用功能更改文本并包含项目符号图像
- 具有搜索文本的功能,不能很好地处理标点符号/符号.Jquery/Jquery mobile.
- 在选择某些项目时显示文本和列表的功能
- 如果处理字符串值的文本区域是只读的,如何使用 JavaScript 在虚拟键盘上使用 CAPSLOCK 功能
- 快速滚筒嘘声+获取文本功能
- CLEditor,将内容粘贴为主窗口中的文本功能
- 自定义加载更多文本功能
- 允许丰富文本功能的输入框
- jQuery文本功能不能正常工作
- d3中的作用域问题.文本功能
- 输入和文本功能