截取带HTML标签的文本并保留文本样式
一个截取HTML文本的工具,可以按照文字字数或文字字节长度进行截取,保留HTML样式并在最后自动补齐截取后的标签。
按工作要求编写,时间紧迫,代码未优化,欢迎讨论和指正。
1. [文件] SubHtml.js
/**
* 文件名:SubHtml.js
* 作 者:DHC
* 说 明:带HTML标签根据HTML内容截取指定长度的HTML文本,并自动补齐截取后的标签
* 版 本:1.0
* 时 间:2014-02-24
* 示 例:subHtml($("#div715").html(), 73, false)
*/
(function(o){
/**
* 判断数组中是否包含某个元素
*/
Array.prototype.inArray = function(v){
for(i=0; i < this.length; i++) {
if(this[i] == v){
return true;
}
}
return false;
}
/**
* 将HTML字符串里面的文本字符检出
*/
o.toText = function(oHtml){
if(typeof oHtml === "string"){
return oHtml.replace(/(^\s*)|(\s*$)/g, "").replace(/<[^<^>]*>/g, "").replace(/[\r\n]/g, "");
} else {
return "";
}
};
/**
* 截取带HTML样式的字符串,并保留并自动补齐HTML标签
* oHtml 将要截取的HTML字符串
* nlen 截取后的长度,包含标签之间的空格
* isByte 是否按照字节长度截取
*/
o.subHtml = function(oHtml, nlen, isByte){
var rgx1 = /<[^<^>^\/]+>/; //前标签(<a>的href属性中可能会有“//”符号,先移除再判断)
var rgx2 = /<\/[^<^>^\/]+>/; //后标签
var rgx3 = /<[^<^>^\/]+\/>/; //自标签
var rgx4 = /<[^<^>]+>/; //所有标签
var selfTags = "hr,br,img,input,meta".split(",");
if(typeof oHtml !== "string"){
return "";
}
oHtml = oHtml.replace(/(^\s*)|(\s*$)/g, "").replace(/[\r\n]/g, "");
var oStr = oHtml.replace(/<[^<^>]*>/g, "");
var olen = isByte ? oStr.replace(/[^\x00-\xff]/g,"**").length : oStr.length;
if(!/^\d+$/.test(nlen) || olen <= nlen){
return oHtml;
}
var tStr = oHtml;
var index = 0;
var matchs = new Array();
while(rgx4.test(tStr)){
var m = new Object();
m.index = index + tStr.search(rgx4);
m.string = tStr.match(rgx4).toString();
var len = tStr.search(/<[^<^>]+>/)+tStr.match(/<[^<^>]+>/)[0].length;
tStr = tStr.substr(len);
index += len;
matchs.push(m);
}
if(isByte){
var i=0;
for(var z = 0; z < oStr.length; z++){
i += (oStr.charCodeAt(z) > 255) ? 2 : 1;
if(i >= nlen){
tStr=oStr.slice(0,(z + 1));
break;
}
}
} else {
tStr = oStr.substr(0, nlen);
}
var startTags = new Array();
for(var i = 0; i < matchs.length; i++){
if(tStr.length <= matchs[i].index){
//tStr += matchs[i].string;
matchs = matchs.slice(0, i);
break;http://www.huiyi8.com/dongman/weimei/
} else {唯美动漫图片
tStr = tStr.substring(0, matchs[i].index) + matchs[i].string + tStr.substr(matchs[i].index);
if(rgx1.test(matchs[i].string.replace(/(\/\/)/g, ""))){
var name = matchs[i].string.replace(/[<>]/g, "").split(" ");
if(name.length > 0){
name = name[0];
if(!selfTags.inArray(name)){
startTags.push(name);
}
}
} else if(rgx2.test(matchs[i].string)){
var name = matchs[i].string.replace(/[<\/>]/g, "");
if(startTags.length > 0 && startTags[startTags.length - 1] === name){
startTags.pop();
}
}
}
}
if(startTags.length > 0){
for(var i = startTags.length - 1; i >=0; i--){
tStr += '</' + startTags[i] + '>';
}
}
return tStr;
}
}(window));
截取带HTML标签的文本并保留文本样式的更多相关文章
- Jsoup提取文本时保留标签
使用Jsoup来对html进行处理比较方便,你可能会用它来提取文本或清理html标签.如果你想提取文本时保留标签,可以使用Jsoup.clean方法,参数为html及标签白名单: Jsoup.clea ...
- 用Ueditor存入数据库带HTML标签的文本,从数据库取出来后,anjular用ng-bind-html处理带HTML标签的文本
ng.module('index-filters', []) .filter('trustHtml', function ($sce) { return function (input) { retu ...
- vim技巧4 删除/保留文本中匹配行
vim技巧:如何删除/保留文本中特定的行呢? <ol><a href="/ss/ss/www"> show invisibles</a> < ...
- wordpress调用the_excerpt()不带<p>标签
我们知道wordpress调用摘要内容用<?php the_excerpt(); ?>就可以,但是它会自动添加一个p标签,例如<p>这里是description</p&g ...
- HTML标签-->段落,格式,文本
只有努力奔跑,才能一直停留在原地. <!--段落标签--> <h1>默认向左</h1> <h1 align="right">向右对齐 ...
- 使用所见即所得文本编辑器编辑文本存入数据库后通过ajax获取服务器json_encode的数据到前台,文本内容上边的html标签不解析
使用所见即所得文本编辑器编辑文本存入数据库后通过ajax获取服务器json_encode的数据到前台,文本内容上边的html标签不解析 因为我在前台使用了jquery的text()方法,而不是html ...
- 如何把大段文字转为带html标签的文字
开发网页的时候,有时候会遇到大段的隐私声明,用户协议等等,我们呀要复制粘贴展示出来,必须加大量的p标签,h1,h2,空格符,br标签,这对我们来说无疑是泪崩的,有个很好的办法,可以快速给这些文字加标签 ...
- SpringMVC和Freemarker整合,带自定义标签的使用方法
SpringMVC和Freemarker整合,带自定义标签的使用方法. [参考来源:http://www.360doc.com/content/14/1225/14/1007797_435663342 ...
- [原创]java WEB学习笔记42:带标签体的自定义标签,带父标签的自定义标签,el中自定义函数,自定义标签的小结
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
随机推荐
- Vue 中computed 与 methods 区别
1.示例 <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF- ...
- 【深入JAVA EE】Spring配置文件解析
在阅读的过程中有不论什么问题,欢迎一起交流 邮箱:1494713801@qq.com QQ:1494713801 一.Spring头信息 Spring配置文件的头部信息通常是固定不变的.但每个标 ...
- 朴素贝叶斯分类算法-----java
1.贝叶斯分类的基础--贝叶斯定理 已知某条件概率.怎样得到两个事件交换后的概率,也就是在已知P(A|B)的情况下怎样求得P(B|A). 这里先解释什么是条件概率: 表示事件B已经发生的前提下,事件A ...
- 【Sprint3冲刺之前】TD学生助手测试用例
项目名称 TDzhushou 项目承担部门 骐骥之队 完成日期 2014/5/29 历史版本: 版本/状态 作者 参与者 起止日期 备注 TDzhushou1.1 解凤娇 骐骥之队 5/3-5/7 2 ...
- 【Sprint3冲刺之前】TD学生助手——alpha版发布
TD学生助手——alpha版发布 1.设想和目标 1.我们的软件要解决的问题 TD学生助手的主要核心思想就是帮助学生安排他们忙碌的学校生活.主要是通过以下几个方面 1.通过学生的需要进行分类(考试, ...
- USB协议[转]__总结得很好
一 枚举过程:◆ 用户将一个USB设备插入USB端口,主机为端口供电,设备此时处于上电状态.◆主机检测设备.◆集线器使用中断通道将事件报告给主机.◆主机发送Get_Port_Status(读端口状态) ...
- cmake学习之- cmake_parse_arguments
最后更新: 2019-06-08 一.指令介绍 cmake_parse_arguments 为解析函数(function)或 宏(macros) 参数的命令: cmake_parse_argument ...
- (最短路径算法整理)dijkstra、floyd、bellman-ford、spfa算法模板的整理与介绍
这一篇博客以一些OJ上的题目为载体.整理一下最短路径算法.会陆续的更新... 一.多源最短路算法--floyd算法 floyd算法主要用于求随意两点间的最短路径.也成最短最短路径问题. 核心代码: / ...
- 启动Eclipse时,启不起来JVM terminated. Exit code=-1
启动Eclipse时,启不起来JVM terminated. Exit code=-1 出现错误了,不知道什么原因原本好好的Eclipse,今天早上出问题了,启动不起来还抛出JVM terminate ...
- jdbcTemplaate queryForObject的两个易混淆的方法
JdbcTemplate中有两个可能会混淆的queryForObject方法: 1. Object queryForObject(String sql, Object[] args, Class ...